ffplay 认为流是 5.1(侧面)而不是 5.1

ffplay 认为流是 5.1(侧面)而不是 5.1

当我尝试使用 ffplay 播放我的 5.1 flac 文件时,它会自动检测流:

  Duration: xx:xx:xx.xx, start: 0.000000, bitrate: xxxx kb/s
    Stream #0:0: Audio: flac, 48000 Hz, 5.1(side), s32 (24 bit)

如您所见,它检测到文件的声道布局为 5.1(侧面)。这会使侧面扬声器(实际上应该是后置扬声器)非常安静。如果我为这些声道增加增益,它们会失真。我只希望它们能够正常播放,ffplay 文档中的其他 5.1 声道布局描述为 FL、FR、C、LFE、RL、RR。

以下是 ffplay 文档的摘录:

Standard channel layout compositions can be specified by using the following identifiers:

‘5.1’

    FL+FR+FC+LFE+BL+BR

‘5.1(side)’

    FL+FR+FC+LFE+SL+SR 

上述两种布局都有 6 个声道。那么我该如何指定我想使用“5.1”而不是“5.1(侧面)”?

音频就是针对这个布局进行混合的,而且我在这个布局中设置了扬声器。

我怎样才能实现这个目标?

答案1

您可以使用频道图筛选:

ffmpeg -i input.flac -af "channelmap=channel_layout=5.1" output.flac

或者,如果您想避免重新编码,可以在播放时重新映射频道:

ffplay -af "channelmap=channel_layout=5.1" input.flac
mpv --audio-channels=5.1 input.flac

答案2

我所做的是将您的 5.1(side) flac 文件用 ffmpeg 分割成 6 个 .wav 文件(必须是相对较新的 ffmpeg)。

首先,将 .flac 放在一个空文件夹中,然后在终端中 cd 到该文件夹​​。此命令将拆分为 .wav 文件。(以 voltest.flac 为例)

ffmpeg -i ./voltest.flac -filter_complex "channelsplit=channel_layout=5.1[FL][FR][FC][LFE][SL][SR]" -map "[FL]" front_left.wav -map "[FR]" front_right.wav -map "[FC]" front_center.wav -map "[LFE]" lfe.wav -map "[SL]" back_left.wav -map "[SR]" back_right.wav

分割后使用此命令重新编码回 flac

ffmpeg -i front_left.wav -i front_right.wav -i front_center.wav -i lfe.wav -i back_left.wav -i back_right.wav -filter_complex "[0:a][1:a][2:a][3:a][4:a][5:a]amerge=inputs=6[aout]" -map "[aout]" output.flac

因此 output.flac 将按照您的需要进行映射。您可以创建一个脚本,通过一些实验一次性将多个 .flac 恢复为原始名称。

相关内容