将两个持续时间不同的 WAV 文件合并在一起,以使结束时间匹配

将两个持续时间不同的 WAV 文件合并在一起,以使结束时间匹配

我有几对 wav 文件(通过从 VoIP 数据包捕获中恢复音频获得)。我想将这两个文件合并为一个单通道 WAV 文件,这很容易用ffmpeg或 来sox实现。但是,这两个文件的长度不同,我想将它们合并在一起,以便结尾文件的匹配项,而不是开始。

例如,有两个文件P0.wavP1.wav。我想将两者合并在一起,以便 P0.wav 开始,然后混合 P1.wav,以便两个文件同时结束:

  <-------P0.wav----> file 1
      <---P1.wav----> file 2

我已经尝试了 ffmpeg 和 sox,两者都会将文件合并到单个通道,但结果是:

 <-------P0.wav----> file 1
 <---P1.wav---->     file 2

有没有办法使用 ffmpeg 或 sox 来实现这一点,最好是“通用”的(即不需要对每个单独的文件进行示例并计算时间),以便我可以将其放入批处理中?

答案1

非常感谢@michaeljan 的启发,答案是反转两个文件,将它们合并在一起,然后再次反转它们。

ffmpeg -i p0.wav -i p1.wav -filter_complex "[0:a]areverse[1r];[1:a]areverse[2r];[1r][2r]amerge[m];[m]areverse[f]" -map "[f]" output.wav

这就是 filter_complex 的魔力:

  1. p0.wav其取反为[1r]
  2. p1.wav其取反为[2r]
  3. 合并[1r][2r]一起[m]
  4. [m]转至[f]

..然后[f]就是最终的文件。

一个小警告是合并文件的长度只与最短文件的长度相同:但是,在我的用例中,我实际上希望p0.wav被截断以匹配长度p1.wav- 如果这不是所需的效果,那么更改amergeamix并使用持续时间选项应该修复这个问题。

相关内容