如何使用 FFmpeg 在一个命令中将 PNG 覆盖在两个视频上(一个视频覆盖另一个视频)?

qua*_*789 6 ffmpeg overlay

我是 FFmpeg 的新用户,我想用一个命令在两个视频(一个视频覆盖另一个)上插入一个标志。

例如,我有一个背景视频 (1)、一个缩放视频 (2) 和一个徽标 (3P,我想创建一个在一个命令中包含“3 on 2 on 1”的视频。

在正常情况下,我必须一步一步地:缩放视频(2),然后将此视频叠加在背景视频(3)上,最后将徽标(1)叠加在顶部。我认为这些步骤会由于重新编码 3 次而降低最终视频质量。


第一步:

ffmpeg -i input.mp4 -filter:v scale=1280:720 -c:a copy output1.mp4
Run Code Online (Sandbox Code Playgroud)

第二步:

ffmpeg -loop 1 -i background.mp4 -i output1.mp4 -filter_complex "[1]scale=1280:720[inner];[0][inner]overlay=70:70:shortest=1[out]" -map "[out]" -map 1:a -c:a copy -y output2.mp4
Run Code Online (Sandbox Code Playgroud)

第三步:

ffmpeg -i output2.mp4 -i logo.png -filter_complex "[0:v][1:v]overlay=10:10:enable=not(between'(t\,10\,15)')" -codec:a copy -preset medium output3.mp4
Run Code Online (Sandbox Code Playgroud)

非常感谢你的帮助。

Gya*_*yan 5

使用这个命令:

ffmpeg -stream_loop -1 -i background.mp4 -i input.mp4 -i logo.png
-filter_complex "[1]scale=1280:720[inner];[0][inner]overlay=70:70:shortest=1[vid];
                 [vid][2]overlay=10:10:enable='not(between(t\,10\,15))'[out]" -map "[out]" -map 1:a -c:a copy -y output.mp4
Run Code Online (Sandbox Code Playgroud)