FFmpeg:在特定时间后将一个视频覆盖在另一个视频上,包括音频

FFmpeg: Overlay one over another video including audio after a specific time

代码取自以下答案: 然后稍作修改。

ffmpeg -i stream1.mp4 -i stream2.mp4 \
-filter_complex "[1:v]setpts=PTS+5/TB[a]; \
                 [0:v][a]overlay=enable=gte(t\,5):shortest=1[out]; \
                 [0][1]amix[a]" \
-map [out] -map [a] \
-c:v libx264 -crf 18 -pix_fmt yuv420p \
-y output.mp4

stream1.mp4 持续时间,例如:35 秒和 stream2.mp4 持续时间,例如:30 秒。我想在 5 秒后开始叠加 (stream2.mp4) 视频+音频。叠加 (stream2.mp4) 视频按预期启动。

但是覆盖 (stream2.mp4) 音频从头开始。我如何也在 5 秒后开始叠加 (stream2.mp4) 音频?

添加 adelay filter:

ffmpeg -y -i stream1.mp4 -i stream2.mp4 \
-filter_complex "[1:v]setpts=PTS+5/TB[v]; \
                 [0:v][v]overlay=enable=gte(t\,5):shortest=1,format=yuv420p[out]; \
                 [1:a]adelay=5s:all=1[a1];[0][a1]amix[a]" \
-map [out] -map [a] \
-c:v libx264 -crf 18 \
output.mp4

如果您的 ffmpeg 已过时,您将不得不使用毫秒并声明每个通道的延迟,例如 adelay=5000|5000.