FFMPEG - 合并两个具有定义的重叠时间的音频文件

Xi *_*iao 2 audio mp3 ffmpeg

要求

我想连接两个具有预定义重叠时间的音频文件。

例如,如果定义了 10 秒重叠,则第一个音频的结束 10 秒和第二个音频的开始 10 秒在输出中重叠。

|<---- 1st mp3 file -------------------->                       |
|                        <-----------2nd mp3 file ------------->|

result:
|<-----------------------(overlap 10 sec )--------------------->|
Run Code Online (Sandbox Code Playgroud)

llo*_*gan 5

  1. 用于ffprobe获取第一个 mp3 文件的持续时间。

  2. 运行时ffmpeg使用adelay来延迟音频并使用amix将两个音频流混合为一个:

    ffmpeg -i 1.mp3 -i 2.mp3 -filter_complex "[1]adelay=Ns|Ns[a1];[0:a][a1]amix=inputs=2[a]" -map "[a]" output.mp3
    
    Run Code Online (Sandbox Code Playgroud)
    • Ns= 1.mp3 duration- overlap duration。例如,如果1.mp3长度为 30 秒,而您想要 10 秒的叠加,则使用20s|20s

    • 这假设2.mp3是立体声。

    • 如果您的ffmpeg版本早于 4.2,则在 adelay 中使用毫秒而不是秒,如 中所示20000|20000

    • -map "[a]"告诉ffmpeg使用 amix 的输出,该输出被任意标记[a]。否则,将使用默认的流选择行为。如果您对此感到满意并理解其含义,那么请随意省略标签 和-map(例如...amix=inputs=2" output.mp3)。另请参阅-map文档。