视频去水印(Video Watermark Remover)
概述
用本机 ffmpeg 的 delogo 滤镜去除视频里的文字水印、平台角标、硬字幕。完全自包含,只依赖 ffmpeg + python3,任何装有这两样的环境(Windows/macOS/Linux)都能直接运行,不依赖 mediakit-cli、opencv 或任何云端 API。
前置条件(环境自检)
- 本机装有 ffmpeg(含 ffprobe)。检查:
ffmpeg -version。未装则先安装并加入 PATH。 - 本机装有 python3。检查:
python --version。 - 无需 opencv / numpy / 任何第三方 Python 库。
如果 ffmpeg 不在 PATH,可用 --ffmpeg / --probe 指定完整路径。
工作流决策
- 用户给定了水印位置("左上角和右下角都有")→ 直接用
--region指定,一次跑完。 - 用户没说位置 → 先抽一帧看位置,再指定区域。
- 已擦过一遍、还有残留 → 对残留区域再指定更精确的
--region补擦。 - 跳帧出现的水印 → delogo 对整个视频持续覆盖该区域,天然覆盖跳帧,无需时间过滤。
第 1 步:确定水印区域
水印常在四角。先抽一帧看位置(ffmpeg 抽帧):
ffmpeg -ss 2 -i "<视频>" -frames:v 1 probe_frame.jpg
用视觉看清水印所在矩形,记下归一化坐标 左上x,左上y,右下x,右下y(范围 [0,1],原点左上角)。水印在四角时,区域要略大于文字本身。
第 2 步:运行去水印脚本
本 Skill 自带脚本 scripts/remove_watermark.py,支持多个区域、保留音轨。
基本用法(指定一个或多个水印区域):
python scripts/remove_watermark.py "<输入视频>" "<输出视频>" \
--region 0.0,0.0,0.3,0.08 \
--region 0.55,0.90,1.0,1.0
--region可多次指定,每个是左上x,左上y,右下x,右下y归一化坐标。--auto-detect可尝试自动检测(启发式,建议手动给区域更可靠)。--ffmpeg <路径>/--probe <路径>指定 ffmpeg/ffprobe 完整路径(不在 PATH 时用)。--no-audio丢弃音轨(默认保留)。
脚本内部自动做四步:
1. ffprobe 读分辨率。
2. 归一化坐标换算成像素。
3. 构建 delogo 滤镜链(多区域自动串联)。
4. 执行 ffmpeg,保留音轨,输出 H.264 视频。
第 3 步:复验与补擦
处理完抽一帧检查四角:
ffmpeg -ss 2 -i "<输出视频>" -frames:v 1 verify_frame.jpg
若残留仍在,用更精确的 --region 再跑一次(补擦),直到干净。
常见问题
- delogo 报 "Logo area is outside of the frame":区域不能贴满画面边缘,脚本已自动内缩 1 像素,如仍报错说明区域本身越界,检查坐标是否在 [0,1]。
- 找不到 ffmpeg/ffprobe:装 ffmpeg 并加入 PATH,或用
--ffmpeg/--probe指定。 - 跳帧水印没除净:delogo 覆盖整段,通常一次就好;极少数闪烁帧可缩小区域再补擦一次。
- 画面里的正常文字被误擦:那是把区域框大了,收窄区域,只框水印本体。
输出
- 交付物:去水印后的视频文件(H.264 MP4),保存到用户指定路径。
- 交付时说明:处理区域、验证覆盖的时间段、仍存在的缺口(如有)。