我尝试将多个叠加层叠加在一起,并在几帧之后淡出最上面的内容。因此,我使用了 2 个 .png 文件,应按以下顺序放置在最终视频中:
fademe.png <-- 最顶层的覆盖,应该在某些帧之后淡出
overlay.png <-- 第二个覆盖,始终可见
movie.mov <- 以电影为底层
我正在使用此代码从覆盖层创建 PNG 编码的 .mov:
ffmpeg -y -loop 1 -i fademe.png -loop 1 -i overlay.png -filter_complex "[0:0]fade=out:25:25[fad];[1:0][fad] overlay" -vframes 55 -vcodec png overlay.mov
然后我使用 ffmbc 将 overlay.mov 放在另一个视频之上。
(我使用 ffmbc 因为最终输出将是 ProRes4444)
ffmbc -y -threads 0 -i movie.mov -vf "movie=overlay.mov [watermark]; [in][watermark] overlay [out]" -vcodec libx264 faded.mp4
输出视频看起来不错,直到开始褪色并且fademe.png [fad]
似乎褪色为白色并且对下面的颜色产生一些奇怪的影响,直到它消失。
overlay
当我将最后的顺序更改为时[1:0][fad] overlay
,[fad][1:0] overlay
它看起来像这样:
ffmpeg -y -loop 1 -i fademe.png -loop 1 -i overlay.png -filter_complex "[0:0]fade=out:25:25[fad];[fad][1:0] overlay" -vframes 55 -vcodec png overlay.mov
褪色看起来正确,但overlay.png [1:0]
不应该是最顶层。
我猜测第一次尝试时 alpha 通道可能出了问题。
关于如何解决这个问题有什么建议吗?
答案1
没有必要使用两个命令并创建带有 alpha 通道的中间文件。带有 3 个输入、2 个叠加滤镜和一个淡入淡出滤镜的单个命令alpha=1
应该可以做到这一点:
ffmpeg -y -i movie.mov -loop 1 -i overlay.png -loop 1 -i fademe.png \
-filter_complex '[0:v][1:v] overlay [V1]; \
[2:v] fade=out:25:25:alpha=1 [V2]; [V1][V2] overlay' \
faded.mp4
答案2
我想我找到了一个解决方案:
首先,我制作了一个逐渐褪色的标志的中间视频
ffmpeg -y -loop 1 -i fademe.png -filter_complex "fade=out:25:25" -vframes 55 -vcodec png fademe.mov
然后我使用这个命令和 ffmbc
ffmbc -i movie.mov -vf "movie=overlay.png [over]; movie=fademe.mov [fade]; [in][over] overlay [inter]; [inter][fade] overlay [out]" -vcodec libx264 out.mp4
...嘿尤里卡!!!
位于作品顶部的标志正在顺利地消失!