使用 FFMPEG 合并两个音频文件并引入偏移

使用 FFMPEG 合并两个音频文件并引入偏移

我有两个单声道 .wav 音频文件,均来自同一来源且长度几乎相同:

p0.wav时长为 00:00:05.92 秒

p1.wav时长为 00:00:05.62 秒

我想将这两个文件合并为一个双通道.M4A文件。我可以使用 ffmpeg 轻松完成此操作:

ffmpeg -i p0.wav -i p1.wav  -filter_complex "[0:a][1:a]amerge=inputs=2[a]" -map "[a]"  output.m4a

.. 效果很好。但是,我想使用 为第二个通道引入 2 秒延迟p1.wav,因此

<-----P0.wav----> channel 0
<-----P1.wav----> channel 1

结果是

<-----P0.wav---->(silence)   channel 0
(silence)<-----P1.wav---->   channel 1

... 生成的文件长 7.62 秒(p1.wav + 2 秒)。

我试过了

ffmpeg -i p0.wav -i p1.wav -filter_complex "[0:a]adelay=0[a1];[1:a]adelay=2000[a2];[a1][a2]amerge=inputs=2[a]" -map "[a]" output.m4a

但这给出了错误

The following filters could not choose their formats: Parsed_amerge_2

我也尝试过该--itsoffset选项,但看起来它只适用于视频。

我怎样才能合并这两个文件(以及可能的其他文件),同时为不同的通道引入不同的偏移量,这可能会导致文件比单个通道更长?

答案1

令人难以置信的是,橡皮鸭调试我可能已经明白了:

ffmpeg -i p0.wav -i p1.wav -filter_complex   "aevalsrc=0:d=2[s1];[s1][1:a]concat=n=2:v=0:a=1[ac2];[0:a]apad[ac1];[ac1][ac2]amerge=2[a]" -map "[a]"  output.m4a

为我未来的自己打破这个过滤器:

  • aevalsrc是 2 ( d=2) 秒的静音 ( =0) 音频作为流[s1]
  • concat [s1]并将第二个文件中的音频一起添加到流中[ac1]- 因此,这是来自 2 秒静音的音频p1.wav现在停留在开始处
  • apad将音频填充到 上p0.wav[ac2]以便与其他流的长度相匹配(不太清楚这是如何工作的,但似乎如此!)
  • amerge合并在一起[ac1][ac2][a]

在 Audacity 中结果如下所示:

在此处输入图片描述

我欢迎任何替代方法,以防我把这个问题搞得太复杂。

相关内容