FFMPEG非常强大,加水印真的方便
执行ffmpeg命令时,请确环境变量或者当前环境可以直接调用ffmpeg.exe 这个命令
我个人的做法是将FFMPEG的可执行文件放到一个目录下,将该目录添加到系统环境变量中。这样可以随时随地调用。
个人技术博客: fuqifacai.github.io
更多技术资讯下载: 2img.ai
相关配图由微信小程序【字形绘梦】免费生成

1 最简单加水印
ffmpeg -hide_banner -i src.mp4 -i watermark.png -filter_complex “overlay=x=0:y=0” target.mp4 -y
上述命令重要参数解释
- src.mp4 原视频
- watermark.png 你要显示的水印图片
- target.mp4 增加水印后输出的视频
- x=0:y=0 在视频内容的左上角x=0,y=0的位置放置水印
效果如下

更多控制:
下面的命令将水印放在视频的右下角10个间距的地方
ffmpeg -i src.mp4 -i watermark.png -filter_complex “overlay=W-w-10:H-h-10:alpha=0.5” target.mp4
其中 W 和 H 表示视频画面的宽度和高度,w 和 h 分别表示水印图片的宽度和高度。
alpha=0.5 表示设置水印透明度为 0.5。
2 旋转水印
ffmpeg -i src.mp4 -loop 1 -i watermark.png -lavfi “[1:v]format=rgba,rotate=’PI/2*t:c=0x00000000:ow=hypot(iw,ih):oh=ow'[out];[0:v][out]overlay=10:10” -shortest target.mp4 -y
上述命令重要参数解释:
- 调整水印宽高,根据勾股定律计算图片对角长度(
hypot
),将这个值设置为水印的宽高,这样,图片无论如何旋转,都不会超过设定的宽高,也就不会出现图片部分丢失的情况了 - 将图片显示的像素格式转换为rgba格式,最后的a表示透明度,如此一来,
c=0x00000000
的作用就是将图片旋转后的背景变为白色且完全透明,这样就不会遮挡视频了 - -loop 1 循环
- overlay=10:10 水印位置

3 更多水印行为控制和表现
更多的一些控制行为有
- 水印本身变化
- 水印显示时间变化
- 水印位置变化
水印本身变化
方法一: 用一个运动的gif图片,不停循环播放即可。 ffmpeg -hide_banner -i src.mp4 -ignore_loop 0 -i watermark.gif -filter_complex overlay -shortest target.mp4 -y
第二种解决方案是使用movie滤镜,同样是让gif循环播放,虽然这种方式复杂点,不过这种解决方案支持视频水印,命令如下: ffmpeg -hide_banner -i src.mp4 -vf "movie=watermark.gif:loop=0,setpts=N/FRAME_RATE/TB[out];[0:v][out]overlay=x=main_w-overlay_w:y=0" -shortest target.mp4 -y
上面的命令有两个地方比较关键:
loop=0,setpts=N/FRAME_RATE/TB
:设置水印gif无限循环-shortest
:将输出文件的时长设置为第一个视频文件的时长,如果不设置,你会发现命令会一直执行根本不会停下来,因为gif图的循环是无限的
这样gif图/短视频就会一直不停的播放了。
当然,如果希望水印播放一次就不播放了,那就设置上面的eof_action
为pass
就可以了,如下: ffmpeg -hide_banner -i src.mp4 -i watermark.gif -filter_complex "overlay=x=0:y=0:eof_action=pass" target.mp4 -y
当然,如果视频一开始就播放且只播放一次,假如水印比较短可能根本就没被注意就过去了,这时可以设置水印出现的延迟时间,使用-itsoffset
选项,如下: ffmpeg -hide_banner -i src.mp4 -itsoffset 3 -i watermark.gif -filter_complex "overlay=x=0:y=0:eof_action=pass" target.mp4 -y
这样,视频播放3秒后,水印才会出现。
水印显示时间变化
设置水印显示时长
ffmpeg -hide_banner -i src.mp4 -i watermark.png -filter_complex "overlay=enable='lte(t,5)'" target.mp4 -y
上面命令作用是:让水印只显示5秒,5秒后消失。
设置水印显示时间段
ffmpeg -hide_banner -i src.mp4 -i watermark.png -filter_complex "overlay=enable='between(t,5,10)'" target.mp4 -y
上面的命令作用是:让水印在视频的5~10秒时间段内显示
设置两个水印轮番出现
ffmpeg -i src.mp4 -i doggie1.png -i watermark.png -filter_complex "overlay=enable='lte(mod(t,10),4)',overlay=enable='gt(mod(t,10),6)'" target.mp4 -y
上面的命令作用是:第一个水印显示4秒后消失,2秒后第二个水印显示4秒后消失。
水印位置变化
设置水印随时间向右移动
ffmpeg -i src.mp4 -ignore_loop 0 -i watermark.gif -lavfi "overlay=x=t*20" -shortest target.mp4 -y
上面命令的作用是:让水印每秒向右移动20像素,直到消失。
设置水印每隔10秒钟从左移动右直至消失
ffmpeg -i src.mp4 -ignore_loop 0 -i watermark.gif -lavfi "overlay=enable='mod(t,10)':x='100*mod(t,10)-w'" -shortest target.mp4 -y
4 添加马赛克
如果需要给视频或图片添加马赛克,可以使用 boxblur 滤镜。该滤镜将指定区域变成模糊效果,从而达到马赛克的效果。
ffmpeg -i src.mp4 -filter_complex “[0:v]boxblur=20[blur];[blur]crop=200:200:300:300,boxblur=20[cropped];[0:v][cropped]overlay=300:300” target.mp4
其中[0:v]boxblur=20[blur] 表示对视频画面进行模糊处理,模糊半径为 20 像素,保存为一个中间变量 blur。[blur]crop=200:200:300:300,boxblur=20[cropped] 表示对模糊后的视频画面进行裁剪,只保留左上角起始坐标为 (300, 300),宽高为 200 的区域,并再次进行模糊处理,保存为一个中间变量 cropped。
最后使用 overlay 滤镜将原始视频和裁剪后的带马赛克画面叠加在一起
5 去除水印
如果视频中的水印和马赛克无法通过软件工具进行剔除,可以在视频上添加其他的图层来遮盖住这些区域。
准备好需要添加的图层,可以是一张图片、一段文字或另一个视频等。
在命令行中输入以下命令:
ffmpeg -i src.mp4 -i watermark.png -filter_complex “[0:v][1:v] overlay=x=W-w-10:y=10” -c:a copy target.mp4
[0:v][1:v] 表示将输入文件和图层文件作为滤镜链的两个输入,overlay=x=W-w-10:y=10 表示使用 overlay 滤镜将图层添加到视频画面的指定位置上,这里的 (x, y) 表示图层左上角相对于视频画面左上角的距离,W 和 w 分别表示视频画面和图层的宽度。-c:a copy 表示保留视频文件中的音频流。
有任何问题,请二维码添加技术交流群。探讨更多AIGC能力
海量AI知识文库,大家一起飞。 技术交流群

AIGC训练营 公众号

RA/SD 衍生者AI训练营。发布者:稻草人,转载请注明出处:https://www.shxcj.com/archives/8796