使用ffmpeg去除水印
我们想要使用ffmpeg去掉视频中某个时间段中显示的水印,指定水印位置及大小这样一个需求;
使用 ffmpeg
去掉视频中的水印是一项相对复杂的任务,但可以通过结合多个 ffmpeg
滤镜来实现。你需要知道水印的具体位置和大小,并使用 delogo
滤镜来去除水印。
以下是如何使用 ffmpeg
去掉视频中指定位置和大小的水印的步骤:
示例命令
假设水印的位置在视频的左上角,位置为 (x=10, y=20)
,大小为 (width=100, height=50)
。
bash
复制代码
ffmpeg -i input.mp4 -vf "delogo=x=10:y=20:w=100:h=50" -c:a copy output.mp4
解释
-
-i input.mp4
:指定输入视频文件。 -
-vf "delogo=x=10:y=20:w=100:h=50"
:使用delogo
滤镜来去除水印。参数x
和y
是水印的左上角坐标,w
和h
是水印的宽度和高度。 -
-c:a copy
:复制音频流,而不重新编码。 -
output.mp4
:指定输出视频文件。
调整好水印位置,及水印大小后,预览处理后的效果
这显然不是我们想要的结果。你可能发现这个视频背景是黑色的,所以我们可以换种方式来去除水印,即我们可以使用一张相同大小的黑色图片盖住水印位置;
使用 ffmpeg
去除视频中的水印并用黑色背景填充该区域可以通过 overlay
滤镜来实现。具体步骤如下:
- 创建黑色图片:首先需要创建一张黑色的图片,大小与水印区域相同。
-
使用
ffmpeg
叠加黑色图片:使用ffmpeg
将黑色图片叠加到视频上,从而覆盖水印。
步骤1:创建黑色图片
假设水印的大小为 300x300
,你可以使用 ffmpeg
创建一张这样的黑色图片:
ffmpeg -f lavfi -i color=c=black:s=300x300 -vframes 1 black.png
步骤2:使用 ffmpeg
叠加黑色图片
假设水印的位置在 (x=100, y=700)
,你可以使用 overlay
滤镜将黑色图片叠加到视频上,从而覆盖水印:
ffmpeg -i input.mp4 -i black.png -filter_complex "overlay=100:700" -c:a copy output.mp4
调整图片大小及水印覆盖位置后,预览下实现效果
所以按这个思路,如果背景色不是黑色,要如何处理呢?
- 简单背景的可以按上述方式处理
- 复杂背景的
- 有delogo滤镜,就有其它的滤镜,可以尝试下
- 是否可以截取前一帧或后一帧画面中的局部来覆盖水印画面呢?
好吧,今天的分享就到这里了,如果感觉对你有用,点个赞支持下呗
共有 0 条评论