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
.
代码取自以下答案:
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
.