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

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

要求

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

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

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

result:
|<-----------------------(overlap 10 sec )--------------------->|

答案1

  1. 使用ffprobe获得持续时间第一个 mp3 文件。

  2. ffmpeg使用运行延迟延迟音频和混合物将两个音频流混合成一个:

    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
    
    • Ns= 1.mp3 duration- overlap duration。例如,如果1.mp3长度为 30 秒,而您想要 10 秒的叠加,则使用20s|20s

    • 假设2.mp3是立体声。

    • 如果您的ffmpeg版本早于 4.2 则使用毫秒而不是秒作为延迟单位,如20000|20000

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

相关内容