我有一个没有音轨的视频,并且想要顺序添加多个音轨(每个音轨都紧随其后开始)。
基本情况可能如下所示:
|-----------VIDEO-----------VIDEO-------------VIDEO-----------VIDEO-----------|
|---FULL AUDIO TRACK 1---|---FULL AUDIO TRACK 2---|---PARTIAL AUDIO TRACK 3---|
这是我要实现的目标:
ffmpeg -i video.mov -i audio1.mp3 -i audio2.mp3 -i audio3.mp3 -map 0:0 -map 1:0 -map 2:0 -map 3:0 out.mp4
当然,它不会产生理想的结果。它只使用out.mp4中的第一个音乐剪辑,结束时不会启动其他音轨。
问题1
为了顺序添加多个音轨,我缺少什么?我假设它指定了音频剪辑的起点和终点,但是我在定位语法上很短。
...
此外,我正在寻找一种方法来确保视频以AUDIO TRACK 3的完整时长结束,如下所示:
|-----------VIDEO-----------VIDEO-------------VIDEO-----------VIDEO-----------|
|---FULL AUDIO TRACK 1---|---PARTIAL AUDIO TRACK 2---|---FULL AUDIO TRACK 3---|
在这种情况下,将修剪音频轨道2,以便将完整的音频轨道3固定在末端。
问题2
可以在FFmpeg中完成这种类型的音频固定,还是必须先用其他程序来修剪AUDIO TRACK 2?
答案 0 :(得分:2)
使用atrim,setsets和concat过滤器:
ffmpeg -i video.mov -i audio1.mp3 -i audio2.mp3 -i audio3.mp3
-filter_complex "[2:a]atrim=duration=5,asetpts=PTS-STARTPTS[a2];[1:a][a2][3:a]concat=n=3:a=1:v=0[a]"
-map 0:v -map "[a]" -c copy -c:a aac -shortest output.mp4
如果要自动执行此操作,则必须编写脚本。您可以使用ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 input.mp4
获取每次输入的持续时间:
{{1}}
然后使用它来确定要修剪的音频流的持续时间。