ffmpeg - 将音频文件连接到一个文件中的不同通道

ffmpeg - 将音频文件连接到一个文件中的不同通道

我有一个像这样的单声道 wav 文件列表

1 speaker1.wav
2 speaker2.wav
3 speaker1.wav
4 speaker2.wav
5 speaker1.wav
6 speaker2.wav

我想将它们连接起来以便得到一个文件,其中每个扬声器都位于​​立体声的左声道或右声道上:

left : 1 3 5
right:  2 4 6

音频文件应按顺序一个接一个地在扬声器之间交替播放,并且未播放的频道上保持静音。

这就是我用于单通道合并的内容:

ffmpeg -f concat -i filenames.txt output.wav -y

filenames.txt 是如下文件的列表

file 'speaker1.wav'
file 'speaker2.wav'
file 'speaker1.wav'
file 'speaker2.wav'
file 'speaker1.wav'
file 'speaker2.wav'

我曾尝试使用这样的连接

ffmpeg -f concat -i 1620655780045.txt -filter_complex "[0:a][1:a]join=inputs=2:channel_layout=stereo[a]" -map "[a]" 1620655780045.wav -y

但我遇到了一个错误Invalid file index 1 in filtergraph description [0:a][1:a]join=inputs=2:channel_layout=stereo[a].,我不知道该如何解决

答案1

首先,使用anullsrc过滤器生成静音/填充/虚拟音频,然后加入过滤器将静音添加到每个输入的相应通道,最后使用连接过滤器连接所有内容。

ffmpeg -f lavfi -i anullsrc=cl=mono -i "1 speaker1.wav" -i "2 speaker2.wav" -i "3 speaker1.wav" -i "4 speaker2.wav" -i "5 speaker1.wav" -i "6 speaker2.wav" -filter_complex
"[0][1]join=inputs=2:channel_layout=stereo:map=1.0-FL|0.0-FR[a1];
 [0][2]join=inputs=2:channel_layout=stereo:map=0.0-FL|1.0-FR[a2];
 [0][3]join=inputs=2:channel_layout=stereo:map=1.0-FL|0.0-FR[a3];
 [0][4]join=inputs=2:channel_layout=stereo:map=0.0-FL|1.0-FR[a4];
 [0][5]join=inputs=2:channel_layout=stereo:map=1.0-FL|0.0-FR[a5];
 [0][6]join=inputs=2:channel_layout=stereo:map=0.0-FL|1.0-FR[a6];
 [a1][a2][a3][a4][a5][a6]concat=n=6:a=1:v=0"
output.wav

相关内容