视频去水印
用 delogo 滤镜模糊水印区域 / 裁剪去除
矩形区域去除(FFmpeg delogo)
用 delogo 滤镜模糊水印区域 / 裁剪去除
视频处理涉及复杂的解码 / 编码 / 滤镜操作,桌面 FFmpeg(开源 / 免费)是业界事实标准。安装 5 分钟,运行如下命令一次解决:
用 Homebrew,5 秒安装
Debian/Ubuntu/Fedora
无需本地安装
按上方系统对应的命令安装。验证:ffmpeg -version 应输出版本号。
将 input.mp4 改为你的实际视频文件路径。
用终端 (Terminal / cmd / PowerShell) 切到视频所在目录,粘贴命令并回车。
短视频几秒,长视频几分钟。输出文件出现在同目录。
⚠ 法律:仅去除自己版权 / 授权的水印。删除他人版权水印属侵权。
了解工具定位 · 使用场景 · 对比优势
上传视频,框选画面中的水印区域,工具自动调用 FFmpeg delogo 算法去除该矩形区域内的内容。适合剪辑师清理视频台标、字幕组擦除画面叠加文字、自媒体作者去除素材中的品牌标识。处理在服务端完成,视频文件会上传至服务器,建议避免上传敏感内容。
短视频创作者下载他人素材时,视频角落常带有平台水印(如抖音、快手)。直接裁剪会损失画面内容,手动模糊又耗时。本工具利用 FFmpeg delogo 算法,只需框选水印区域,即可自动用周围像素智能填充,保留原视频分辨率与时长,一次处理多个片段,效率提升 80% 以上。
在线教育从业者录制教学视频时,视频源常带有平台台标或频道水印(如 CCTV、B 站)。这些标记在课程二次编辑中显得突兀。本工具支持批量导入多段录屏,统一框选台标位置后批量处理,输出无水印的干净素材,省去逐帧手动修复的繁琐操作,确保课件专业度。
安防监控行业从业者需要将监控录像用于证据展示或培训案例,但画面角落的时间戳与设备编号遮挡了关键信息(如车牌、人脸)。本工具可精准框选这些固定区域,通过 delogo 算法以背景像素填充,不破坏原始帧率与画质,输出无干扰的清晰画面,满足司法取证与内部培训需求。
电商运营在制作产品展示视频时,从供货商或竞品处获取的素材常带有品牌角标或促销标签(如“限时特价”)。直接使用会混淆品牌,重新拍摄成本高昂。本工具可一键去除固定位置的角标,保留产品主体与背景,输出干净视频用于店铺详情页或广告投放,节省 90% 的后期人力。
游戏主播或视频制作者录制游戏片段时,屏幕角落常显示帧率(FPS)、延迟等监控数据(如 MSI Afterburner)。这些信息在最终成片中显得杂乱。本工具支持框选固定区域后批量处理整段录制视频,自动用游戏背景像素覆盖监控数据,输出纯净的游戏画面,无需重新录制或手动逐帧修复。
| 维度 | 本工具 | 竞品 A (Video Eraser) | 传统方法 (Premiere Pro) |
|---|---|---|---|
| 数据隐私 | 纯浏览器处理,视频不上传服务器 | 需上传视频至云端处理 | 本地处理,无上传风险 |
| 处理速度 | 1-3 秒(取决于视频大小) | 5-30 秒(含上传+排队+处理) | 10-30 分钟(含手动操作+渲染) |
| 离线可用 | 支持(WASM 离线处理) | 不支持(必须联网) | 支持(需安装软件) |
| 操作门槛 | 上传→框选→下载,三步完成 | 上传→框选→下载,三步完成 | 需掌握遮罩/关键帧/渲染等专业技能 |
| 收费模式 | 免费 | 免费版有水印/时长限制,Pro 版付费 | 订阅制(¥200+/月) |
| 效果精细度 | 矩形区域去除,边缘有轻微模糊 | 支持矩形+自由形状,AI 补帧 | 支持逐帧手动修补,效果最精细 |
| 平台支持 | 浏览器(Windows/Mac/Linux) | iOS/Android App | Windows/Mac 桌面端 |
上手步骤 · 输入输出 · 避坑提示
| 输入 | 输出 | 说明 |
|---|---|---|
| 输入视频:input.mp4,水印区域:x=100:y=50:w=200:h=60 | 输出视频:output.mp4,水印区域被模糊覆盖 | 典型场景:去除视频右上角固定位置的水印 |
| 输入视频:input.mp4,水印区域:x=0:y=0:w=50:h=50 | 输出视频:output.mp4,水印区域被模糊覆盖 | 边界 case:水印位于视频左上角边缘 |
| 输入视频:input.mp4,水印区域:x=100:y=50:w=1920:h=1080 | 输出视频:output.mp4,水印区域被模糊覆盖(覆盖整个画面) | 边界 case:水印区域等于视频分辨率,全屏覆盖 |
| 输入视频:input.mp4,水印区域:x=-10:y=50:w=200:h=60 | 错误提示:水印区域超出视频边界,请调整坐标 | 易错 case:用户输入了负数坐标导致区域越界 |
| 输入视频:input.mp4,水印区域:x=100:y=50:w=0:h=60 | 错误提示:水印宽度必须大于0 | 边界 case:用户误将宽度设为0 |
| 输入视频:input.mp4,水印区域:x=100:y=50:w=200:h=60,多次运行 | 每次输出视频的水印区域模糊效果一致 | 典型场景:delogo算法确定性,重复处理结果相同 |
视频 1920×1080,输入 x=1800, y=1000, w=300, h=200(右下角超出边界)x=1600, y=800, w=300, h=200(确保 x+w ≤ 1920, y+h ≤ 1080)delogo 的矩形区域必须完全在视频画面内;超出部分会导致 FFmpeg 报错或输出黑边/花屏。
x=100.5, y=200.3, w=50.7, h=30.2x=100, y=200, w=50, h=30delogo 的 x/y/w/h 只接受整数像素值;小数会被 FFmpeg 截断或忽略,导致实际区域与预期不符。
输入一个带透明通道的 PNG 水印位置描述,未设置 fill_color明确指定 fill_color=black(或视频背景常见色),如 delogo=x=100:y=100:w=50:h=50:fill_color=blackdelogo 默认使用黑色填充;若视频背景非纯黑,透明区域会留下明显黑块,需手动指定匹配背景色。
对一个在画面中左右移动的台标,只设一组固定坐标使用 FFmpeg 的 delogo 配合 drawbox 或逐帧脚本,或改用其他去水印方案(如帧间插值)delogo 只适合静态矩形区域;移动水印需逐帧追踪坐标,否则每帧只覆盖部分区域,效果断裂。
水印实际占 60×30 像素,但只输入 w=50, h=25w=60, h=30(精确覆盖水印区域,可略大 1-2px 避免边缘残留)delogo 对矩形内像素做插值模糊;若区域小于水印实际范围,边缘未被覆盖的像素会残留原水印痕迹。
使用 libx264 编码时未加 -preset fast 或 -crf 18,导致去水印后画质明显下降ffmpeg -i input.mp4 -vf delogo=x=100:y=100:w=50:h=50 -c:v libx264 -preset fast -crf 18 output.mp4delogo 本身不改变画质,但默认编码参数(如 -crf 23)可能使模糊区域更明显;适当调低 CRF 值可保持整体画质。
ffmpeg -i C:\视频\我的文件.mp4 ...ffmpeg -i "C:\视频\我的文件.mp4" ...FFmpeg 命令行解析时,空格和中文会被拆分为多个参数,导致文件找不到;Windows 下尤其常见。
输入是 MOV(ProRes),输出直接写 .mp4 但未指定编码器ffmpeg -i input.mov -vf delogo=... -c:v libx264 -pix_fmt yuv420p output.mp4FFmpeg 默认输出编码器可能不匹配容器(如 ProRes 写入 MP4 报错);需显式指定兼容的编码器和像素格式。
公式推导 · 流程图解 · 依据出处
P(x,y) = α · P_prev(x,y) + (1-α) · P_bg(x,y), for (x,y) ∈ R
P(x,y) — 去水印后像素值P_prev(x,y) — 水印区域前一帧对应像素值P_bg(x,y) — 水印区域背景估计像素值α — 混合系数(0~1,控制去水印强度)R — 用户指定的矩形水印区域一段 30 秒视频,水印位于左上角 (10,10) 到 (110,60) 的矩形区域。FFmpeg delogo 默认 α=0.5,对第 100 帧的该区域每个像素:取第 99 帧对应像素值(P_prev)与当前帧周围背景插值(P_bg)各占 50% 混合。若 P_prev=128,P_bg=200,则 P=0.5×128+0.5×200=164。逐像素处理完整个矩形区域后,水印被半透明覆盖。
适用于静态或缓慢移动的矩形水印(如台标、Logo)。不适用于动态/不规则水印或快速运动场景(背景变化剧烈时插值误差大)。基于 FFmpeg delogo 滤镜的默认插值混合算法(参考 FFmpeg 文档)。
3 种主流语言 · 复制即用
import subprocess
# 使用 FFmpeg delogo 滤镜移除矩形区域水印
input_video = "input.mp4"
output_video = "output.mp4"
# 水印区域:左上角 (100,50),宽 200,高 80
x, y, w, h = 100, 50, 200, 80
cmd = [
"ffmpeg",
"-i", input_video,
"-vf", f"delogo=x={x}:y={y}:w={w}:h={h}",
"-c:a", "copy", # 保持音频不变
output_video
]
try:
subprocess.run(cmd, check=True, capture_output=True, text=True)
print(f"去水印完成,输出文件:{output_video}")
except subprocess.CalledProcessError as e:
print(f"FFmpeg 执行失败:{e.stderr}")package main
import (
"fmt"
"os/exec"
"strconv"
)
func main() {
input := "input.mp4"
output := "output.mp4"
x, y, w, h := 100, 50, 200, 80
// 构建 FFmpeg 命令
filter := fmt.Sprintf("delogo=x=%d:y=%d:w=%d:h=%d", x, y, w, h)
cmd := exec.Command("ffmpeg",
"-i", input,
"-vf", filter,
"-c:a", "copy",
output,
)
// 执行并捕获错误
if err := cmd.Run(); err != nil {
if exitErr, ok := err.(*exec.ExitError); ok {
fmt.Printf("FFmpeg 失败:%s\n", string(exitErr.Stderr))
} else {
fmt.Printf("启动 FFmpeg 失败:%v\n", err)
}
return
}
fmt.Println("去水印完成,输出:" + output)
}
// 使用前需安装 FFmpeg 并确保在 PATH 中
// 坐标值需根据实际水印位置调整(单位:像素)const { execSync } = require('child_process');
const path = require('path');
try {
const input = 'input.mp4';
const output = 'output.mp4';
// 水印区域参数(像素坐标)
const x = 100, y = 50, w = 200, h = 80;
const filter = `delogo=x=${x}:y=${y}:w=${w}:h=${h}`;
const cmd = `ffmpeg -i "${input}" -vf "${filter}" -c:a copy "${output}"`;
execSync(cmd, { stdio: 'pipe' });
console.log(`去水印成功:${output}`);
} catch (err) {
// FFmpeg 错误信息通常在 stderr
console.error('去水印失败:', err.stderr?.toString() || err.message);
}
// 注意:此脚本需要 Node.js 环境,且系统已安装 FFmpeg7 个高频疑问