我有两个单声道 .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 中结果如下所示:
我欢迎任何替代方法,以防我把这个问题搞得太复杂。