jasna:1080p 视频马赛克修复 34 秒完成,显存峰值不到 6 GB
jasna:1080p 视频马赛克修复 34 秒完成,显存峰值不到 6 GB
【免费下载链接】jasnaVideo restoration tool项目地址: https://gitcode.com/GitHub_Trending/ja/jasna
一段 3 分 22 秒的 1080p 视频,把画面里每一处马赛克(被打码的图像区域)恢复成正常内容需要多久?同项目的旧版本 v0.4.1 要 1 分 46 秒、显存近 20 GB,主流开源工具 Lada 也要 2 分钟以上。jasna 是一个在本地 GPU 上运行的视频马赛克修复工具,负责检测、修复并把每处马赛克结果回填,画面其余部分完全不动。在 RTX 5090 上,v0.9.1 处理这段 1080p H.264 视频耗时 34 秒——处理一段视频比看一遍它还短,不用再"挂着跑一晚"。换成 4K 输入是 1 分 03 秒,约为 Lada 0.11.0 的 4.7 倍速,意味着 4K 素材的批量修复从小时级进入分钟级。更关键的是显存:1080p 典型占用 4.8 GB、峰值 5.6 GB——8 GB 显存的消费级显卡(RTX 3060、4060 等)可以完整跑通全流程,这是旧版本做不到的。
把问题拆成一条主线:不整帧修,只修该修的地方
视频修复慢、显存高,根子在于"逐帧整图处理":一帧 4K 画面里马赛克可能只占一小块,整帧修复却要为全部像素付出算力。jasna 围绕一条主线组织全流程——先定位马赛克,在它周围切一小块裁剪图,送修复模型,再把结果回填进原帧。解码检测、一级修复、二级修复、混合编码四个环节各开一个线程,用有界队列串成生产者-消费者链,队列上限就是片段长度 max_clip_size;队列满时上游自然阻塞,吞吐由水位动态平衡,而不是卡死在最慢的单点上(见 jasna/pipeline_threads.py)。第二个关键决策:输入文件被硬件解码两次,一次喂检测,一次让编码线程取干净原帧做混合,代价是重复解码,而 NVDEC 硬件解码路径 4K 纯解码可达 681 fps,解码从来不是瓶颈(后端可用JASNA_DECODE_BACKEND在 vali / pyav-hw / pyav-sw 间切换,见 jasna/media/video_decoder.py)。
同一段时间窗被两个片段各修一遍:交接处如何看不出缝
修复不是逐帧独立做的。跟踪器给每个马赛克分配 track_id,聚成 clip(同一个马赛克的一组连续帧);clip 超过 max_clip_size 就带重叠拆开,镜头切换处也会强制断开,两个镜头绝不混进同一段。麻烦在边界:同一马赛克横跨相邻两个 clip 时,两份结果会在交界处互相"打架"。jasna 的做法是重叠区被两个 clip 各修一遍,再按线性权重融合——权重公式(j + 0.5) / (2 * bf)出自 jasna/pipeline_overlap.py,bf 约为重叠长度的一半,交叉淡化复用的都是已修好的帧,所以不产生额外计算量。
回填也不是贴一块矩形。混合阶段把检测时输出的逐像素 mask 上采样回原图分辨率当权重,核心就是一行就地插值:
original_crop.lerp_(resized_back, blend_mask.unsqueeze(0)).round_().clamp_(0, 255) # mask 内取修复结果,边缘向原像素平滑过渡mask 内侧 100% 采用修复像素,外侧保留原像素,边界处 lerp(线性插值)平滑过渡;落在重叠区时权重再乘交叉淡化系数,改走"修复减原图再叠加"的差分路径,两个 clip 的贡献线性相加。每帧要等它关联的所有 track 结果到齐才放行混合(见 jasna/blend_buffer.py),不存在"修到一半就编码"的竞态。
显存账:从 9 GB 到 4.8 GB,省在哪,花了什么
v0.9.0 到 v0.9.1,1080p 典型显存从 9.3 GB 掉到 4.8 GB,主要来自一个结构修正:TensorRT(NVIDIA 的推理加速工具包)引擎会为最大 batch 预留 scratch 内存,preprocess/upsample 两个子引擎原先按 180 帧的 clip 长度构建,常驻 4560 MiB;改用固定 batch(preprocess 60 帧、upsample 30 帧)后驻留降到 916 MiB,upsample 引擎文件从 452 MB 缩到 78 MB,端到端耗时 33.6 秒变 33.8 秒,等于没有损失——省显存是靠改引擎构建方式,不是砍功能。
真正的代价有两处。一是首次任务要等 15–60 分钟:NVIDIA 上检测和修复模型会为你的具体 GPU 编译成引擎,结果缓存在model_weights目录并可拷进新版本,这就是"首次慢、之后快"的来源;如果关掉编译,1080p 从 33 秒变 107 秒,只省不到 0.5 GB,不划算。二是片段长度:1080p 下 30 帧的 clip 要 51 秒、90 帧 34 秒、720 帧 33 秒但显存到 8.0 GB——片段更小反而更慢,因为重叠帧在每个片段里都要重算一次,8 GB 显卡应选 60–90 帧而不是最小值。
哪些显卡和场景适合,哪些要慎重
推荐使用场景:GTX 16 系 / RTX 20 系及更新的 NVIDIA 显卡(计算能力 7.5 及以上)处理 1080p 及以下视频;4K 建议 12 GB 及以上显存,因为 2160p 峰值约 10.9 GB,8 GB 卡装不下。VR180 全景视频有专用检测模型和逆投影混合路径,属于原生支持。需要慎重:AMD 显卡走 ROCm/AMF 实验性路径,无 TensorRT 编译,速度明显落后;追求极限细节时免费的 BasicVSR++(快速视频修复模型)有质量上限,扩散模型 LTX 慢得多、需要额外授权码,首次还要下载 9–15 GB 模型文件;GTX 10 系及更早显卡则完全不支持。
一句话定位:jasna 是本地 GPU 上"只修该修"的工程化实现,用定位局部化和环节重叠,把消费级显卡的 1080p 修复压进半分钟、显存压进 8 GB 以内。
【免费下载链接】jasnaVideo restoration tool项目地址: https://gitcode.com/GitHub_Trending/ja/jasna
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考