暖宝宝官方认证铲屎官
ffmpeg第4篇:为视频添加动态水印
发布于: 2021-02-24 更新于: 2021-03-11 分类于: ffmpeg 阅读次数: 

动态分为三种:

  • 水印本身变化
  • 水印显示时间变化
  • 水印位置变化

水印本身变化

看过上一篇的小伙伴可能觉得第一种很简单,把jpg格式的图片换成gif格式的不就可以了吗,然而亲自试一下就会发现,把gif图片当水印加上去后,图片播放一遍就不会动了。
之所以会这样是因为在ffmpeg中,水印的eof_action选项默认为repeat(参考这里),而repeat的作用是重复最后一帧,这就是为什么gif图片播放一遍就不动了的原因。

要解决这个问题,有两种方式,第一种是设置gif的-ignore_loop为0,让gif保持循环播放即可,命令如下:
ffmpeg -hide_banner -i big_buck_bunny.mp4 -ignore_loop 0 -i doggie3.gif -filter_complex overlay -shortest out.mp4 -y
但是这种方式,只适用于gif格式的图像,如果滤镜是一小段视频就无能为力了。

第二种解决方案是使用movie滤镜,同样是让gif循环播放,虽然这种方式复杂点,不过这种解决方案支持视频水印,命令如下:
ffmpeg -hide_banner -i big_buck_bunny.mp4 -vf "movie=doggie3.gif:loop=0,setpts=N/FRAME_RATE/TB[out];[0:v][out]overlay=x=main_w-overlay_w:y=0" -shortest out.mp4 -y
上面的命令有两个地方比较关键:

  • loop=0,setpts=N/FRAME_RATE/TB :设置水印gif无限循环
  • -shortest :将输出文件的时长设置为第一个视频文件的时长,如果不设置,你会发现命令会一直执行根本不会停下来,因为gif图的循环是无限的

这样gif图/短视频就会一直不停的播放了。

当然,如果希望水印播放一次就不播放了,那就设置上面的eof_actionpass就可以了,如下:
ffmpeg -hide_banner -i big_buck_bunny.mp4 -i doggie3.gif -filter_complex "overlay=x=0:y=0:eof_action=pass" out.mp4 -y

当然,如果视频一开始就播放且只播放一次,假如水印比较短可能根本就没被注意就过去了,这时可以设置水印出现的延迟时间,使用-itsoffset选项,如下:
ffmpeg -hide_banner -i big_buck_bunny.mp4 -itsoffset 3 -i doggie3.gif -filter_complex "overlay=x=0:y=0:eof_action=pass" out.mp4 -y
这样,视频播放3秒后,水印才会出现。

水印显示时间变化

设置水印显示时长

ffmpeg -hide_banner -i big_buck_bunny.mp4 -i doggie2.png -filter_complex "overlay=enable='lte(t,5)'" out.mp4 -y
上面命令作用是:让水印只显示5秒,5秒后消失。

设置水印显示时间段

ffmpeg -hide_banner -i big_buck_bunny.mp4 -i doggie2.png -filter_complex "overlay=enable='between(t,5,10)'" out.mp4 -y
上面的命令作用是:让水印在视频的5~10秒时间段内显示

设置两个水印轮番出现

ffmpeg -i big_buck_bunny.mp4 -i doggie1.png -i doggie2.png -filter_complex "overlay=enable='lte(mod(t,10),4)',overlay=enable='gt(mod(t,10),6)'" out.mp4 -y
上面的命令作用是:第一个水印显示4秒后消失,2秒后第二个水印显示4秒后消失。
这里布置个作业?huaji 请让两个水印一个在左上角,一个在右上角

水印位置变化

设置水印随时间向右移动

ffmpeg -i big_buck_bunny.mp4 -ignore_loop 0 -i doggie3.gif -lavfi "overlay=x=t*20" -shortest out.mp4 -y
上面命令的作用是:让水印每秒向右移动20像素,直到消失。

设置水印每隔10秒钟从左移动右直至消失

ffmpeg -i big_buck_bunny.mp4 -ignore_loop 0 -i doggie3.gif -lavfi "overlay=enable='mod(t,10)':x='100*mod(t,10)-w'" -shortest out.mp4 -y
很实用很常见的水印展现方式有没有?huaji可以有效的防止别人盗视频并把水印去掉

这篇讲了三种水印活动的方式,下篇让水印转起来~huaji

有问题请留言沟通,欢迎转载,转载请注明出处

博客地址:暖宝宝官方认证铲屎官

--- 本文结束 The End ---