如何在 FFmpeg 4.0 中将 5.1 音频拆分为离散的 AAC 流

How to split 5.1 audio into discrete AAC streams in FFmpeg 4.0

在 FFmpeg v4.0 之前,我已经能够 运行 对包含 H.264 视频轨道和 AC3 或 DTS 音频流的输入视频文件执行以下命令,并生成具有6 个音频流。每个流对应5.1音频的一个声道。

ffmpeg -i INPUT.MKV -vcodec copy -filter_complex channelsplit=channel_layout=5.1 -acodec aac -movflags faststart OUTPUT.MP4

它甚至可以在立体声轨道上工作,并将 L 和 R 通道放在适当的位置,并为其他 4 个通道产生一些无关的无声轨道。

但现在在 v4.0.1 中出现以下错误:

[aac @ 0x7f7f65001e00] Unsupported channel layout

Error initializing output stream 0:0 -- Error while opening encoder for output stream #0:0 - maybe incorrect parameters such as bit_rate, rate, width or height

Conversion failed!

将命令更改为以下内容并没有改善:

ffmpeg -i INPUT.MKV -vcodec copy -filter_complex "channelsplit=channel_layout=5.1[FL][FR][FC][LFE][BL][BR]" -acodec aac -movflags faststart OUTPUT.MP4

它给出了以下错误:

Filter channelsplit:BR has an unconnected output

(请注意 BL/BR 和 SL/SR 都会产生相同的 BR 错误)

此 MP4 文件结构对于在环境中放置虚拟扬声器的 Unity 内部播放非常有用。

我的最终目标:

- MP4 (MOOV Atom at the Front)
    -H.264 Video Stream
    -AAC Audio Stream - FL
    -AAC Audio Stream - FR
    -AAC Audio Stream - FC
    -AAC Audio Stream - LFE
    -AAC Audio Stream - SL
    -AAC Audio Stream - SR

这就是设置新布局和地图的方式。

ffmpeg -i INPUT.MKV
       -filter_complex "channelsplit=channel_layout=5.1[FL][FR][FC][LFE][BL][BR];
                        [FL]aformat=channel_layouts=mono[FL];
                        [FR]aformat=channel_layouts=mono[FR];
                        [FC]aformat=channel_layouts=mono[FC];
                        [LFE]aformat=channel_layouts=mono[LFE];
                        [BL]aformat=channel_layouts=mono[BL];
                        [BR]aformat=channel_layouts=mono[BR]"
       -map 0:v -map '[FL]' -map '[FR]' -map '[FC]' -map '[LFE]' -map '[BL]' -map '[BR]'
       -vcodec copy -acodec aac -movflags faststart OUTPUT.MP4