使用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 滤镜来去除水印。参数 xy 是水印的左上角坐标,wh 是水印的宽度和高度。
  • -c:a copy:复制音频流,而不重新编码。
  • output.mp4:指定输出视频文件。

调整好水印位置,及水印大小后,预览处理后的效果

这显然不是我们想要的结果。你可能发现这个视频背景是黑色的,所以我们可以换种方式来去除水印,即我们可以使用一张相同大小的黑色图片盖住水印位置;

使用 ffmpeg 去除视频中的水印并用黑色背景填充该区域可以通过 overlay 滤镜来实现。具体步骤如下:

  1. 创建黑色图片:首先需要创建一张黑色的图片,大小与水印区域相同。
  2. 使用 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

调整图片大小及水印覆盖位置后,预览下实现效果

所以按这个思路,如果背景色不是黑色,要如何处理呢?

  • 简单背景的可以按上述方式处理
  • 复杂背景的
  1. 有delogo滤镜,就有其它的滤镜,可以尝试下
  2. 是否可以截取前一帧或后一帧画面中的局部来覆盖水印画面呢?

好吧,今天的分享就到这里了,如果感觉对你有用,点个赞支持下呗

版权声明:
作者:siwei
链接:https://www.techfm.club/p/132738.html
来源:TechFM
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>