在视频上淡入/淡出 PNG 水印叠加

在视频上淡入/淡出 PNG 水印叠加

我在脚本中有一个 FFmpeg 命令,它将主视频与结尾视频淡入淡出,然后在其上叠加半透明的 PNG 水印。

ffmpeg -y -i "$1" -i "outro.mp4" -i "../Watermark/watermark3.png" \
-filter_complex \
"color=black:$res:d=$total[base]; \
[0:v]scale=-2:'max(720,ih)',setpts=PTS-STARTPTS[v0]; \
[1:v]format=yuva420p,fade=in:st=0:d=$fadeduration:alpha=1,setpts=PTS-STARTPTS+(($fadetime)/TB)[v1]; \
[2:v]lut=a=val*0.7[v2]; \
[v2][v0]scale2ref=w=oh*mdar:h=ih*0.1[wm_scaled][vidtmp1]; \
[base][vidtmp1]overlay[tmp]; \
[tmp][v1]overlay,format=yuv420p[tmp2]; \
[tmp2][wm_scaled]overlay=W-w-50:50:format=auto,format=yuva420p[outv]" \
-map "[outv]" -map 0:a:0 -c:v libx264 -crf 17 -c:a copy "$output"

这个方法已经足够好了,但我希望覆盖层 a) 仅显示在主视频上,以及 b) 淡入淡出。

但是,尝试fade向水印添加必要的过滤器:

[2:v]lut=a=val*0.7,fade=in:st=5:d=2:alpha=1,fade=out:st=150:d=2:alpha=1[v2];

...只是默默地失败了,产生了一个工作输出,但根本没有水印可见。

这里发生了什么?

答案1

事实证明,这个烦人且对我来说长期存在的问题的原因是由于 PNG 在技术上没有框架:因为它没有框架,所以没有任何动画,因此也没有任何淡入或淡出的内容。

令人恼火的是,对此没有错误检查,并且覆盖只是从流中删除,但无论哪种方式,都可以通过-loop在图像路径之前直接添加一个选项来非常简单地解决:

-i source.mkv -i outro.mp4 -loop 1 -i watermark.png ...

您可能还需要在应用覆盖时shortest=1overlay过滤器添加选项,以确保覆盖在视频结束时停止而不是无限循环:

[mainvid][watermark]overlay=W-w-50:50:shortest=1[outv];

相关内容