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 通道出了点问题。
任何建议如何解决这个问题?
不需要使用两个命令并创建一个带有 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)
我想我找到了一个解决方案:
首先,我创建了一个褪色标志的中间影片
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!
位于构图顶部的徽标正在消失,美观且光滑!
| 归档时间: |
|
| 查看次数: |
12160 次 |
| 最近记录: |