Jasna:把去除马赛克流水线搬上 GPU,比 Lada 快 3~4 倍,效果堪比原片
Jasna 拆解:把整条视频修复流水线塞进 GPU,比 Lada 快 3 到 4 倍
一个开源的本地视频 / 图片马赛克修复工具。应用层 AGPL-3.0,带 GUI 和完整 CLI,全流程在本机 GPU 上跑。仓库地址 github.com/Kruk2/jasna | 中文说明 github.com/Kruk2/jasna/blob/main/README.zh.md
这类工具过去最大的痛点是能用但慢:CPU 解码、逐帧落盘、模型跑在 PyTorch eager 上、编码再交给 CPU x264。Jasna 的做法是把每一步都挪到 GPU,并且针对只修一小块区域这个场景做了专门的工程优化。下面按流水线拆开讲,最后给可以直接抄的命令。
一、流水线:7 个阶段,全部在 GPU 上
解码 NVDEC/AMF → 检测 rfdetr-v6 逐帧找马赛克 → 跟踪并分片 → BasicVSR++ 修复成 256×256 图块 → 可选二次修复 → 融合回原帧 → NVENC/AMF 编码且音频直通。
几个值得单独拎出来的工程细节:
1. 分片是按对象而不是按时间轴。 不是简单把视频切成 N 帧一段。它先逐帧跟踪每一个马赛克目标,同一个目标的连续帧才归为一个 clip。三个后果:镜切处强制断开,所以一个 clip 永远不会跨两个镜头,不会把 A 镜头的纹理糊到 B 镜头;clip 之间有重叠帧并做交叉淡化,消除拼接闪烁;短暂漏检可以被补上,不会导致片段被切断。
2. 修复分辨率固定 256×256。 BasicVSR++ 只处理 256×256 的图块,不是整帧。这是显存能压到 4 到 5 GB 的根本原因——修 4K 和修 1080p,模型侧开销一样,差别只在解码、融合和编码。
3. 融合阶段只改马赛克区域。 原帧其余像素原样保留。这比整帧重绘的方案靠谱得多,不会把整段视频的画质和噪点特征都改掉。
4. 音频直通。 只有输出容器不支持源音频格式时才重编码,默认 mkv 容器基本不会触发。
二、模型矩阵
修复模型用 --restoration-model-name 指定:
| 参数值 | 画质 | 速度 | 说明 |
|---|---|---|---|
basicvsrpp | 基准 | 1× | 默认值,免费 |
ltx | 细节明显更多 | 很慢 | 标准 LTX,官方推荐 |
ltx-4step | 略多于 ltx | 约 1.5× 慢 | 良好档 |
ltx-8step | 多于 4step | 约 2.5× 慢 | 高画质档 |
ltx-undistilled | 最佳 | 约 5× 慢 | 顶级档 |
LTX 是扩散模型路线,处理逻辑和 BasicVSR++ 完全不同。它会跑 4 遍:找马赛克、准备、扩散修复、保存。更慢,但能生成真实纹理细节,而不只是插值。
检测模型用 --detection-model 指定:
| 参数值 | 场景 | 默认阈值 |
|---|---|---|
rfdetr-v6 | 默认,内置 | 0.35 |
rfdetr-vr-v1 | VR180,内置 | 0.40 |
lada-yolo-v4 | 内置 | 0.25 |
rfdetr-v6-large | 可选下载,更准更慢 | 0.40 |
zelefans-vr-yolo-v2 | 可选下载,VR 专用 | 无 |
调阈值的口诀:漏检就调低,误检就调高。
二次修复用 --secondary-restoration 指定:
| 参数值 | 说明 | 配套参数 |
|---|---|---|
unet-4x | 支持者模型,修复区域更清晰 | NVIDIA 限定 |
rtx-super-res | 走 RTX 显卡自带超分 | --rtx-scale 2/4、--rtx-quality low/medium/high/ultra、--rtx-denoise、--rtx-deblur |
tvai | 调 Topaz Video AI 的 ffmpeg,Windows 专用 | --tvai-model iris-2/prob-4/iris-3 |
静态图片自动切 SD 1.5 路线,--restoration-model-name 对图片无效:
| 参数 | 默认 | 说明 |
|---|---|---|
--sd15-steps | 25 | 细化步数,越多细节越多但更慢 |
--sd15-strength | 0.6 | 重绘强度,上限 0.7,重马赛克往上调 |
--sd15-freeu | 开 | 形状更清晰,出现生硬边缘时关掉 |
--sd15-variants | 1 | 一次出 N 个版本,种子递增,自己挑 |
三、性能数字
3 分 22 秒整段视频,RTX 5090(Linux),BasicVSR++:
| 输入 | Lada 0.11.0 | Jasna 0.9.1 | 加速比 |
|---|---|---|---|
| 720p H.264 | 01:47 | 00:32 | 3.4× |
| 1080p H.264 | 02:02 | 00:34 | 3.6× |
| 2160p H.264 | 04:56 | 01:03 | 4.7× |
分辨率越高加速越明显,因为瓶颈被搬到了 GPU 上,而 Lada 在 CPU 侧的固定开销不随分辨率下降。
显存占用(典型 / 峰值,GB):
| 输入 | Lada | v0.4.1 | v0.5.0 | v0.9.0 | v0.9.1 |
|---|---|---|---|---|---|
| 720p 8-bit | 1.8/3.1 | 17.6/19.9 | 8.6/9.0 | 8.6/9.1 | 4.2/4.6 |
| 1080p 8-bit | 2.0/3.3 | 18.9/21.4 | 9.5/10.2 | 9.3/10.1 | 4.8/5.6 |
| 2160p 8-bit | 2.6/4.1 | 26.0/30.5 | 12.9/15.0 | 11.4/15.4 | 7.2/10.9 |
一个版本里 1080p 显存从 18.9 GB 干到 4.8 GB,降了将近 4 倍,这是这次最实在的优化。
四、怎么用:从零到跑通
Step 0 先自查硬件,别白下载。
| 项 | 要求 |
|---|---|
| NVIDIA | GTX 16 系 / RTX 20 系起,算力 ≥ 7.5;驱动 Windows ≥ 610、Linux ≥ 580 |
| AMD | RX 7000/9000 实验性;Windows 需 Adrenalin ≥ 26.8.1;ROCm |
| 显存 | BasicVSR++ 4 GB 起;LTX 需 ≥ 8 GB 显存 + 16 GB 内存 |
| 磁盘 | SSD;Windows NTFS / Linux ext4·Btrfs·XFS·ZFS;不支持网络盘 |
| 路径 | 不能含中文、日文、带重音的字符(国内用户踩坑第一名) |
Step 1 下载解压。 从 GitHub Releases 下对应系统和显卡的发行包,解压到纯英文路径。D:\下载\jasna\ 会直接崩,D:\tools\jasna\ 才行。
Step 2 启动。 Windows 下 GUI 和 CLI 是同一个文件,双击 jasna.exe。Linux NVIDIA 运行 ./jasna。Linux AMD 要先装一次 AMF 运行库,从 repo.radeon.com/amf/26.20/ 下载 zip、解压、执行 sudo bash amf_installer_26.20.sh,同意许可协议后运行 run_jasna_amd.sh。
Step 3 首次运行要等 15 到 60 分钟,这一步跑不掉。 在 NVIDIA 上 Jasna 会用 TensorRT 为你的具体 GPU 编译检测模型和 BasicVSR++ 修复模型,用了 UNet 4x 也会一起编译。期间别开浏览器、别打游戏、别用这台电脑。编译结果存在 model_weights/ 目录里,之后所有任务复用。升级 Jasna 时把这个目录拷到新版本里,就不用再等一次。
编译到底值不值:
| 设置 | 时间 | 显存 |
|---|---|---|
| 编译(默认) | 33 秒 | 5.0 GB |
--no-compile-basicvsrpp | 107 秒 | 4.6 GB |
省不到 0.5 GB 显存,代价是慢 3 倍。除非真卡在显存边缘,否则别关。
Step 4 跑第一个任务。 GUI 里拖入视频,鼠标悬停每个设置旁的 info 图标看说明(每个选项都有解释,别猜),点界面底部的播放按钮。
五、CLI:可以直接抄的用法
CLI 能覆盖 GUI 的绝大部分功能。只有视频播放器、LTX 种子预览、遮罩建议、交互式图片处理这四项是 GUI 专属。
| 场景 | 命令 |
|---|---|
| 单个视频 | jasna --input input.mp4 --output output.mkv |
| 单张图片(自动走 SD 1.5) | jasna --input photo.png --output restored.png |
| 整个文件夹(先图片后视频) | jasna --input input_folder --output output_folder |
批量加命名模板、加日志:
jasna --input D:/videos/in --output D:/videos/out --output-pattern "{original}_restored" --max-clip-size 90 --temporal-overlap 12 --log-level info
{original} 是输入文件名主干,图片保留原扩展名。如果两个输入会映射到同一个输出文件,Jasna 会在处理前报错退出,不会跑到一半才发现覆盖。
只修一段用区间模式:
jasna --input in.mp4 --output out.mkv --segments "10-25,01:10-01:30.5"
单位是秒或 mm:ss,逗号分隔多个区间。注意 --segments 下输出强制使用输入的编解码器,指定不同的 --codec 会直接报错。另外它不能和 --stream、--retarget-high-fps、--fmp4、--ltx-auto-split 共用。
混合策略,大马赛克用 LTX、小的用 BasicVSR++:
jasna --input in.mp4 --output out.mkv --restoration-model-name ltx --ltx-auto-split 12
意思是高度达到视频高度 12% 的马赛克交给 LTX,其余用 BasicVSR++。这是省钱又省时间的玩法,支持文件夹输入。
LTX 常用开关:
| 开关 | 效果 |
|---|---|
--ltx-fast | 快约 1.4 倍,细节略少;仅 RTX 50 系,其他卡直接报错 |
--ltx-large-canvas | 大马赛克细节更多,该部分约 3 倍慢;需约 12 GB 空闲显存 |
--ltx-seed 20260923 | 固定种子,结果可复现 |
--ltx-trial | 免费测速,不需要模型和许可证,视频不会被修复 |
--ltx-trial 这个最该先跑:jasna --input in.mp4 --output out.mp4 --restoration-model-name ltx --ltx-trial。决定要不要掏钱之前,先用它看你的卡能不能跑 LTX、要跑多久。
LTX 任务中断了怎么续:Ctrl+C、报错、关掉应用,重新跑同一条命令就从已保存的进度继续,--segments 和 --ltx-auto-split 也支持。注意未完成的跟踪段可能要重做,输出保存会从头开始。输入、设置或版本变了,替换进度前会先问你;没有交互终端时会停下并保留进度。
显存怎么调,1080p、重叠 8、RTX 5090 的官方数据:
--max-clip-size | 时间 | 显存 |
|---|---|---|
| 30 | 51 秒 | 3.4 GB |
| 60 | 40 秒 | 3.7 GB |
| 90 | 34 秒 | 4.1 GB |
| 180 | 35 秒 | 5.0 GB |
| 360 | 32 秒 | 6.3 GB |
| 720 | 33 秒 | 8.0 GB |
反直觉但重要:片段小不是更快,是更慢。重叠帧在每个 clip 里都要重新处理一遍,clip 越多重复工作越多。超过大约 180 之后时间不再下降,只有显存上升。
调参结论:在显存放得下的范围内用最大的 --max-clip-size,更大意味着更稳且更快;--temporal-overlap 放 8 到 20,超过 20 基本没收益;--enable-crossfade 保持开启,零成本;4K 视频在同 clip 大小下约需 1.5 倍显存;4 到 6 GB 显存跑 1080p,从 --max-clip-size 30 起步。
显存还是不够时的处理顺序:降 clip 大小,然后关掉或换轻量的二次修复,最后关掉其他吃 GPU 的应用(浏览器是隐形大户)。Jasna 有兜底,显存不够时会把等待中的帧挪到系统内存再挪回来,不需要额外设置,但你不会喜欢那个速度。
编码别用默认值糊过去。更高质量(文件更大)用 --cq 22,CQ 加高级编码器参数:
jasna --input in.mp4 --output out.mkv --cq 22 --encoder-settings "rc-lookahead=32,bf=4,preset=p7"
编解码器默认 CQ(NVIDIA):
| 编解码器 | 默认 CQ | 特点 |
|---|---|---|
hevc | 28 | 10-bit,体积和画质平衡最好,不确定就用它 |
h264 | 25 | 仅 8-bit,兼容性最强,同画质体积更大 |
av1 | 35 | 同画质体积最小,需 RTX 40 / RX 7000 及以上 |
有个不显眼但很关键的机制:输出体积自动上限。cq 追求固定质量,对低码率源会输出成好几倍大。所以 Jasna 会按源码率自动设 maxrate:
| 情况 | 上限 |
|---|---|
| NVIDIA H.264 输出 | 源码率 2.0× |
| 其他输出 + HEVC 源 | 源码率 1.25× |
| 其他组合 | 源码率 1.0× |
想关掉就自己把 --maxrate 设成一个大值顶上。
边跑边看有两种。HLS 流式输出不落文件、浏览器里直接看:jasna --input in.mp4 --output out.mp4 --stream --stream-port 8765。生成中就能播的 mp4,中断后文件仍可播放:jasna --input in.mp4 --output out.mp4 --fmp4。后者很适合长任务,跑到一半断电,前面那段还是能播的。
跑完自动干活。全部完成就关机,CLI 模式没有倒计时:jasna --input in.mp4 --output out.mkv --post-export-action shutdown。
每个视频完成后跑命令:
jasna --input in_folder --output out_folder --post-export-video-command "ffmpeg -i {output} -map 0 -map_metadata 0 -map_chapters 0 -c copy -movflags +faststart {output_dir}/{output_stem}_remuxed{output_suffix}"
占位符有 {input}、{output}、{output_dir}、{output_stem}、{output_suffix}。批量处理一整晚的活儿,直接挂 --post-export-action shutdown 走人。
Windows 可以把临时文件丢到内存盘减少 SSD 磨损,用 ImDisk 建个 NTFS 内存盘,启动前设置 TMP 和 TEMP 环境变量指向它。Jasna 优先读 TMP,其次 TEMP,不认 TMPDIR。区间和 LTX 的临时文件位置用 --working-directory 单独指定。
六、激活:支持者模型怎么开
只有 LTX、UNet 4x、SD 1.5 这三个需要许可证,BasicVSR++ 免费。
| 累计支持 | 拿到什么 |
|---|---|
| 15 美元 | UNet 4x(修复区更清晰)+ SD 1.5(图片) |
| 25 美元 | 上面两个 + LTX(含后续更新) |
一码可用 3 台机器或云工作区,激活后完全离线。
| 方式 | 命令 |
|---|---|
| 在线激活 | jasna --license-code "你的许可证码" |
| 激活并跑任务 | jasna --license-code "你的许可证码" --input in.mp4 --output out.mkv |
| 显示机器密钥 | jasna --machine-key |
| 保存激活密钥 | jasna --activation-key "你的激活密钥" |
机器没网或在线激活失败,走手动三步:先 jasna --machine-key 显示机器密钥(不启动 GPU 和 GUI,很快);再在任意设备打开 jasna-activation.kruk2.workers.dev,输入机器密钥加许可证码,拿到激活密钥;最后 jasna --activation-key 保存。
租云 GPU(RunPod、Vast)跑 LTX,加 --cloud-workspace,并且把 XDG_CONFIG_HOME 指到一个你会备份的私有目录,激活信息存在那儿,每次必须用同一个。别用 RunPod 的 /workspace,它会忽略私有文件权限。
设备名额怎么算:Windows 换主板算一台新机器,Linux 重装才算。重装 Windows、换显卡或硬盘或内存都不占名额,用同一个码重新激活就行。
七、踩坑清单
| 坑 | 症状 | 解法 |
|---|---|---|
| 路径含中文 | 启动即崩或模型加载失败 | 挪到纯 ASCII 路径 |
| 首次运行动了电脑 | 编译超时 / 失败 | 重跑;关掉浏览器和游戏 |
| 机械硬盘 | 启动和加载模型极慢 | 换 SSD |
| 网络盘 / 映射盘 | 不支持 | 拷到本地 |
| 显存不足 | OOM 或疯狂换页 | 降 --max-clip-size,1080p 从 30 起 |
| 担心漏检 | 有小区域没修 | 降 --detection-score-threshold,如 0.35 → 0.25 |
| 过度误检 | 正常画面被改 | 提高阈值;或调 --min-detection-duration |
| 升级后 LTX 要重下模型 | 0.11.3 的模型不能直接用 | 按提示同意更新,model_weights 其他部分可拷 |
渠道安全这条必须说:只从 GitHub 下载。许可证码只通过 Buy Me a Coffee、Unifans、闲鱼官方卖家三条路走。闲鱼上其他卖 Jasna 的都不是官方,密钥用不了,文件还可能在你的机器上跑别的代码。同理 --license-code 和 --activation-key 不能和 --machine-key 同时用,遇到让你这么干的教程直接划走。
八、30 分钟上手路线
| 步骤 | 做什么 | 耗时 |
|---|---|---|
| 1 | 自查显卡,建纯英文路径目录 | 5 分钟 |
| 2 | 下发行包,解压 | 3 分钟 |
| 3 | 启动,挂机等模型编译 | 15 到 60 分钟,去泡茶 |
| 4 | 拖个短视频,默认参数点播放 | 看你的卡 |
| 5 | 细节不够就跑 --ltx-trial | 免费测速 |
| 6 | 决定要不要 LTX,要走官方渠道激活 | 几分钟 |
| 7 | 按显存表调 --max-clip-size,批量 + 自动关机 | 一次性配置 |
九、几个判断
适合谁:有 NVIDIA 独显(8 GB 显存以上更舒服)、有批量处理需求、愿意花时间调参的人。全 GPU 流水线加 CLI 加区间修复加自动关机这套组合,做长任务比点 GUI 舒服得多。
不适合谁:只有核显或 GTX 10 系的机器;只需要处理一两张图的轻度用户,首次编译的时间成本不划算。
关于收费:BasicVSR++ 免费且已经能打,比 Lada 快 3 到 4 倍。LTX 是给要求细节、不接受插值糊感的人准备的。先跑 --ltx-trial 看你的卡撑不撑得住,再决定掏不掏钱,这个设计挺讲道理。
源码层面:应用层 AGPL-3.0,模型和捆绑依赖各有自己的许可,详见 LICENSING.md、assets/THIRD_PARTY_MODELS.md、RELEASE_SOURCES.md。从源码跑可以用免费 BasicVSR++,但激活和支持者模型必须用官方发行版。项目受 Codeberg 上的 Lada 启发,用的 mosaic_restoration_1.2 模型是 Lada 作者 ladaapp 训练的,生态是接上的,不是凭空造。
相关链接
| 资源 | 地址 |
|---|---|
| 项目地址 | github.com/Kruk2/jasna |
| 中文文档 | github.com/Kruk2/jasna/blob/main/README.zh.md |
| CLI 完整参考 | github.com/Kruk2/jasna/blob/main/docs/zh/cli.md |
| 调优指南 | github.com/Kruk2/jasna/blob/main/docs/zh/tuning.md |
| 社区 | discord.gg/FgrSuwZS3s |