我有一个带音频的视频 (overlayvideo.mov),我要将它叠加在另一个视频 (basefilem.mp4) 上,并且从 20 秒开始叠加。输出 (finalvideo.mp4) 看起来不错,但叠加中的音频仍然从 00:00:00.000 开始,而不是我需要的开始时间,即 00:00:20.000(我用 itoffset 设置)。
我知道 itoffset 只处理视频。那么,我该如何在下面的命令中指定在 itoffset 的同时启动覆盖中的音频?
这是我当前的命令。它运行完美,只是我只是想弄清楚如何以及在何处放置延迟过滤器,以便覆盖中的音频与覆盖视频同时开始(在此示例中,我需要覆盖音频在 20 秒后开始)
ffmpeg -y -i basefilem.mp4 -itoffset 00:00:20.000 -i overlayvide.mov - ilter_complex "[1:v]scale=1280x720[ovrl];[0:v][ovrl]overlay=eof_action=pass[outv];[0:a][1:a]amix[outa]" -map [outv] -map [outa] -c:v mpeg4 -strict experimental -ascale:v 10 finalvideo.mp4
答案1
经过几个小时尝试使用 atrim 和 adelay 的各种解决方案,但都无济于事,我最终选择了这种方法。效果非常好。
- 创建 [s1]。 否是秒数(以匹配视频偏移量(itsoffset))
aevalsrc=0:d=N[s1]
- 将 [s1] 和 overlayvideo 的音频连接起来(其中 [s1] 位于 [1:a] 之前):
[s1][1:a]concat=n=2:v=0:a=1[ovrla]
将 basevideo ([0:a]) 中的音频与 [ovrla] 混合
Ffmpeg -y -i basevideo.mp4 -itsoffset 4 -i overlayvideo.mov -filter_complex "aevalsrc=0:d=4[s1];[s1][1:a]concat=n=2:v=0:a=1[ovrla];[1:v]scale=1280:720[ovrl];[0:v][ovrl]overlay=eof_action=pass[outv];[0:a][ovrla]amix[outa]" -map [outv] -map [outa] -c:v mpeg4 -strict experimental -qscale:v 10 finalvideo.mp4