FFmpeg提取所有音频通道

3
有没有办法在ffmpeg中提取所有音频通道并为每个通道分别命名?
问题在于我不知道输入文件会有多少个通道。
以下是将其拆分为两个wav文件的代码示例:
ffmpeg -y -i input.wav -filter_complex
"[0:a]channelsplit=channel_layout=stereo[left][right]" -map "[left]"
left.wav -map "[right]" right.wav

如果输入文件包含3或8个通道,该怎么办?理想情况下,我希望有一种方法可以将Nchannels.mp4转换为Nchannels_1.wavNchannels_2.wav,...,Nchannels_N.wav
1个回答

1
你将需要分步骤完成这个任务。
  1. Get number of channels with ffprobe:
    ffprobe -v error -show_entries stream=channels,channel_layout -of default=nw=1 input.wav
        channels=6
        channel_layout=5.1
    
  2. (Optional) Refer to ffmpeg -layouts to get channel names so you know what to name the outputs; as in the example below.
  3. Build ffmpeg command using results from ffprobe:
    ffmpeg -i input.wav -filter_complex "channelsplit=channel_layout=5.1[FL][FR][FC][LFE][BL][BR]" -map "[FL]" front_left.wav -map "[FR]" front_right.wav -map "[FC]" front_center.wav -map "[LFE]" low_frequency_effects.wav -map "[BL]" back_left.wav -map "[BR]" back_right.wav
    

1
在我的情况下,使用 ffprobe -v error -show_entries stream=channels,channel_layout -of default=nw=1 8ch.wav 命令会显示以下内容: channels=8 channel_layout=unknown,所以我不确定如何将结果映射到 ffmpeg 的参数上。 - undefined
@AlexanderF 参考ffmpeg -layouts并选择你认为最有可能的布局。 - undefined
这是一个非常好的答案,对于真正的5.1声音效果非常有效。有没有办法在只有2个音频通道中进行Dolby Surround编码呢?默认情况下,ffmpeg只会输出两个通道,而不是将音频解复用成3个或4个通道。据说可以使用GraphEdit来实现,但那只适用于Windows系统。我还在寻找适用于Mac的解决方案。 - undefined
@larryy ffmpeg关于输入文件显示了哪些信息?你可以使用一个pastebin网站,并在评论中提供链接。 - undefined
@llogan 这是一个 ffprobe 和尝试解复用的链接:https://pastebin.com/NSQbiZAu。测试文件 test.ac3 在这里:https://drive.google.com/file/d/1XCtRedHKdkAtM4_A9JiN3L6AMKvoxxZw/view?usp=sharing。生成的声道文件在 FL 和 FR 声道中有音频,其他声道没有任何内容。 - undefined
@larryy 你应该提出一个新的问题。Matrixed Dolby Surround(或者无论这是什么)不是我经常处理的内容,所以我不清楚。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接