我正在尝试将一个视频叠加在另一个视频之上,条件如下
- 只应使用视频的特定部分,例如,100 秒视频中的 10-50 秒
- 叠加视频开始前应该有一个延迟
但问题是,叠加视频的音频与视频不同步,并且在视频之前播放。
下面是一个示例命令,我用它来修剪视频 14 秒,然后在 10 秒延迟后叠加它
ffmpeg -y -i main_video.mp4 \
-itsoffset 10.0 -ss 30.0 -t 13.99 -i "foreground_video.mp4" \
-filter_complex \
"[1:v]scale=156:86[sv1];[0:v][sv1]overlay=33:156:shortest=1:enable='between(t,10.0,13.99)'[overlay0];\
[1:a]adelay=10000|10000[1ad];[0:a][1ad]amix=inputs=2[outa]" \
-map [overlay0] -map [outa] test.mp4
如果我-ss 30.0 -t 13.99
从命令中删除,则视频会覆盖正确的音频,但我只想要视频的特定部分。
答案1
itsoffset + adelay 会产生意外结果,即结果流中出现间隙。在应用 adelay 之前,请使用 asetpts 移除偏移。 -ss 也会干扰转码。因此,请跳过 itsoffset,对视频应用单独的 setpts 过滤器,对音频应用 adelay。
使用
ffmpeg -y -i main_video.mp4 \
-ss 30.0 -t 13.99 -i "foreground_video.mp4" \
-filter_complex \
"[1:v]scale=156:86,setpts=PTS-STARTPTS+10.00/TB[sv1];[0:v][sv1]overlay=33:156:shortest=1:enable='between(t,10.0,13.99)'[overlay0];\
[1:a]adelay=10000|10000[1ad];[0:a][1ad]amix=inputs=2[outa]" \
-map [overlay0] -map [outa] test.mp4