- Blog
- videowipe 实测:能自动检测的视频清洁引擎,字幕水印台标一次清
videowipe 实测:能自动检测的视频清洁引擎,字幕水印台标一次清
videowipe 实测:能自动检测的视频清洁引擎,字幕水印台标一次清
视频去水印的隐形成本:手动框选
用过视频去水印工具的人都知道流程有多繁琐:把视频拖进去,一帧一帧找到水印出现的位置,画个框,祈祷它全程都在同一个地方。但现实里的视频根本不是这样——字幕只出现在说话的段落,水印前 10 秒在左下角、后面跑到右上角,台标时隐时现。固定区域处理的结果就是:水印擦掉了,可那些没有水印的帧也被白白糊掉一块。
GitHub 上一个叫 videowipe 的开源项目想解决的就是这个问题:自动检测 + 时间感知。它先扫描整段视频,找出每一个字幕、水印、台标、时间戳,给每个目标单独建立"时间轨道",然后只擦除目标真正出现的那些帧。全程不用手动框选。
一、核心设计:时间感知的 remove/keep 轨道
videowipe 最特别的概念是 WipePlan(擦除计划)——一个纯 JSON 文件,里面每个检测目标是一条"轨道"(track),带四个关键信息:
- action:
remove(擦除)或keep(保留) - segments:该目标出现的时间区间
- mask:精确蒙版(存在独立的
.npz侧车文件里,不允许手动编辑) - source:绑定的源视频
这套设计的精髓在于"时间感知":一条字幕在第 5 秒出现、第 20 秒消失,它的轨道里就只记录这两个时间点之间的片段。执行擦除时,只有这些帧会被处理,同一区域在没有字幕的帧里保持原样。字幕被擦掉了,画面其他地方一点不受影响。
WipePlan 可以人工审查:用任何编辑器打开 JSON,把某条轨道的 action 从 remove 改成 keep,或者调整 segments 的时间范围,再重新执行。计划绑定源视频——拿这份计划去跑另一段视频会被直接拒绝,防止误用。
二、自动检测:多语言、四类目标、意图驱动
videowipe 的检测能力是它的另一个卖点:
- 多语言文本检测:官方在中文、英文、韩文、缅甸语字幕上实测过,开箱即用;
- 四类目标:
subtitle(字幕)、timestamp(时间戳)、watermark(水印)、logo(台标),默认全自动检测,也可以--target指定; - 区域限定:
--region可以只检测顶部、底部、四个角落或中间区域; - 意图驱动:
--intent支持自然语言描述清理目标(比如"只去掉右下角的 logo"); - 本地 LLM 代理:
--agent可以接入本地大模型 CLI(如 claude、codex)来自动决策意图选择。
检测精度也有三档:fast(24 帧粗检)、balanced(50 帧,默认)、sensitive(80 帧密集复查),后者会重新检查检测器给出的 remove 片段,减少漏网。
三、架构:SDK 优先,而不是又一个 GUI
videowipe 的架构思路和大多数去水印工具相反——核心是一个可复用的 Python 引擎 WipeEngine,CLI、本地 Web UI、Docker 镜像都只是这个引擎的"适配器"。
- 创建一次 WipeEngine 实例,可以在整个批量任务中复用,模型只加载一次;
WipeEngine.run()返回WipeResult,出错抛出稳定的WipeError异常类型(无效输入、缺后端、取消、处理失败分开报);- 老的
process()和remove_text()入口保持向后兼容; - 不需要 LLM、不需要云服务,计划就是纯 JSON,任何编辑器或本地 agent 都能改。
要求是 Python 3.10+,推理后端 ONNX Runtime 或 PyTorch 二选一,底层用 opencv-python-headless(无显示服务器的容器里也能跑)。还没发布到 PyPI,需要从源码安装;模型权重首次运行时自动下载到 ~/.videowipe/weights/。
四、修复模型:内置 STTN,外接 ProPainter
擦除部分,videowipe 默认内置 STTN(Video Inpainting Transformer,CPU 上的 ONNX 推理即可运行,无需 GPU)。想要更高质量,可以用 --external-command 接入任意第三方修复模型——命令收到 <视频> <蒙版> <输出目录> 三个参数,把成品视频放进输出目录即可。
官方对比测试(一段韩语+缅甸语双语字幕 MV,852×480,10 秒片段):
- ProPainter(GPU fp16):画质更高;
- STTN(CPU ONNX):内置默认,零 GPU 门槛。
注意 ProPainter 的代价:处理 480p 视频大约需要 16GB 显存,而且许可证是 NTU S-Lab License 1.0(非商用)。
五、命令行速查
核心命令是 clean(完整流水线),常用参数:
| 参数 | 作用 | 默认 |
|---|---|---|
--target | 指定目标类型:subtitle/timestamp/watermark/logo,可重复 | 自动检测全部 |
--region | 限定检测区域:top/bottom/四个角/center | 全部区域 |
--intent | 自然语言清理意图 | — |
--preview | 只输出检测结果,不执行修复 | 关 |
--plan | 执行已有的 wipe_plan.json | — |
--confirm | 处理前展示检测到的目标并确认 | 关 |
--detect-mode | fast/balanced/sensitive | balanced |
--external-command | 外接修复模型命令 | — |
-g, --gap | 每遍处理的分段长度,越大质量越高越慢 | 200 |
-d, --dual | 输出并排对比视频 | 关 |
完整流程一句话:videowipe clean --target subtitle --target watermark input.mp4。
六、适合谁用
videowipe 的价值在于把"人工框选 + 盲处理"变成了"自动检测 + 精准时间擦除":
- 搬运/二创作者:批量清理下载素材里的硬字幕和水印,多语言检测对海外素材尤其友好;
- 想做自动化管线的开发者:SDK-first 架构 + JSON 计划 + Python API,适合嵌进自己的批处理 worker;
- 追求可控性的用户:WipePlan 可审查可编辑,擦之前先看计划,比黑盒工具放心。
当然它也有门槛:需要 Python 环境,命令行操作,默认 STTN 的画质上限不如 ProPainter。但如果你想找的是一台"能自己找水印"的清洁引擎,而不是又一个人工框选工具,videowipe 是目前开源生态里思路最特别的一个。
