Audio 使用ffmpeg按顺序添加多个音频曲目,并将特定曲目固定到结尾

Audio 使用ffmpeg按顺序添加多个音频曲目,并将特定曲目固定到结尾,audio,ffmpeg,Audio,Ffmpeg,我有一个没有音轨的视频,想按顺序添加几个音轨(每个音轨紧接着另一个音轨开始) 基本情况可能如下所示: |-----------VIDEO-----------VIDEO-------------VIDEO-----------VIDEO-----------| |---FULL AUDIO TRACK 1---|---FULL AUDIO TRACK 2---|---PARTIAL AUDIO TRACK 3---| 以下是我实现这一目标的尝试: ffmpeg -i video.mov -

我有一个没有音轨的视频,想按顺序添加几个音轨(每个音轨紧接着另一个音轨开始)

基本情况可能如下所示:

|-----------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
当然,这并没有产生预期的结果。它只使用第一个音乐剪辑in out.mp4,结束时不会启动其他音轨

问题1
为了按顺序添加多个音轨,我遗漏了什么?我假设它指定了音频剪辑的起点和终点,但我没有找到语法

此外,我正在寻找一种方法来确保视频以音频曲目3的完整持续时间结束,如下所示:

|-----------VIDEO-----------VIDEO-------------VIDEO-----------VIDEO-----------|  
|---FULL AUDIO TRACK 1---|---PARTIAL AUDIO TRACK 2---|---FULL AUDIO TRACK 3---|
在这种情况下,音频轨迹2将被修剪,以便将完整的音频轨迹3固定到末端

问题2

这种类型的音频固定可以在FFmpeg中完成,还是必须先用另一个程序修剪音频曲目2?

使用atrim、asetpts和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
  • 修剪音频。如果您喜欢使用
    开始
    和/或
    结束
    选项而不是
    持续时间
    ,也可以使用这些选项
  • 重置时间戳(concat要求)
  • 连接每个音频段
如果你想让它自动化,你必须编写脚本。您可以使用
ffprobe
获取每个输入的持续时间:

ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 input.mp4

然后用它来确定要修剪的音频流的持续时间。

使用atrim、asetpts和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
  • 修剪音频。如果您喜欢使用
    开始
    和/或
    结束
    选项而不是
    持续时间
    ,也可以使用这些选项
  • 重置时间戳(concat要求)
  • 连接每个音频段
如果你想让它自动化,你必须编写脚本。您可以使用
ffprobe
获取每个输入的持续时间:

ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 input.mp4

然后用它来确定要修剪的音频流的持续时间。

perfect。我了解了你计算持续时间的方向——但并非所有人都会。我将添加持续时间的简单计算,可能在替换“持续时间=5”时使用注释。例如,duration=audio2.mp3(D)=video.mov(D)-audio3.mp3(D)-audio1.mp3(D),其中(D)是每个命名文件的持续时间。是否有任何方向可以将多个视频源添加到此脚本中,并在它们之间进行1秒的交叉淡入?@kraftydevil See.perfect。我了解了你计算持续时间的方向——但并非所有人都会。我将添加持续时间的简单计算,可能在替换“持续时间=5”时使用注释。例如,duration=audio2.mp3(D)=video.mov(D)-audio3.mp3(D)-audio1.mp3(D),其中(D)是每个命名文件的持续时间。是否有任何方向可以将多个视频源添加到此脚本中,并在它们之间进行1秒的交叉淡入?@kraftydevil请参阅。