ffmpeg:如何放置多个叠加层并正确淡出最顶部

evi*_*inz 6 ffmpeg overlay transparency

我正在尝试将几个叠加层相互叠加并在一些帧后淡出最顶部。因此,我使用了 2 个 .png 文件,它们应按以下顺序放置在最终视频中:

fakeme.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
Run Code Online (Sandbox Code Playgroud)

然后我使用 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
Run Code Online (Sandbox Code Playgroud)

输出视频看起来不错,直到开始淡入淡出并且fademe.png [fad]似乎淡化为白色并对下面的颜色做一些奇怪的事情直到它消失。

当我将最后一个中的顺序overlay[1:0][fad] overlayto更改时,[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
Run Code Online (Sandbox Code Playgroud)

褪色看起来不错,但overlay.png [1:0]不应该是最顶层。

我的猜测是我第一次尝试时 alpha 通道出了点问题。

任何建议如何解决这个问题?

mar*_*k4o 7

不需要使用两个命令并创建一个带有 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
Run Code Online (Sandbox Code Playgroud)


evi*_*inz 1

我想我找到了一个解决方案:

首先,我创建了一个褪色标志的中间影片

ffmpeg -y -loop 1  -i fademe.png -filter_complex "fade=out:25:25" -vframes 55 -vcodec png fademe.mov
Run Code Online (Sandbox Code Playgroud)

然后我将此命令与 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
Run Code Online (Sandbox Code Playgroud)

...Heureka!

位于构图顶部的徽标正在消失,美观且光滑!