Ffmpeg/lavfi 是否可以淡出加载了 movie= 过滤器而不是 -i 参数的图像覆盖

Ffmpeg/lavfi Is it possible to fade out an image overlay that was loaded with a movie= filter not a -i parameter

我试过类似的东西:

movie='overlaylogo.png',fade=out:st=5:d=1[logo],[in][logo]overlay='0:0'[out]

但它似乎坚持 100% 不透明度,在 movie= 加载后添加 loop=loop-1fps=24 过滤器似乎效果不大,是否需要一些步骤将图像转换为视频以应用淡入淡出?

关键是让您的流保持活跃,这样 fade 过滤器才能发挥作用。图像输入在发送帧后立即消失。

有了 -i 我们会做

ffmpeg -i input.mp4 -loop 1 -i logo.png \
       -filter_complex [1:v]fade=out:st=5:d=1:alpha=1,[0:v]overlay=0:0:shortest=1[out] \
       -map [out] -map 0:a output.mp4

-loop image2 输入选项使流保持活动状态。 movie 源过滤器必须做同样的事情。它有 loop 选项,但有一个警告:“请注意,当电影循环播放时,源时间戳不会更改,因此它将生成非单调递增的时间戳。”所以,你需要添加 setpts 过滤器来自己建立单调递增的时间戳:

ffmpeg -i input.mp4 \
       -vf movie=logo.png:loop=0,setpts=N/FR/TB,fade=out:st=5:d=1,[in]overlay=0:0:shortest=1[out] \
       output.mp4

P.S., loop=-1(不是 1)也应该有效(而且它可能不需要 setpts 过滤器来修复时间戳)。