通过 MFT 拆分 AAC 音频通道

Posted

技术标签:

【中文标题】通过 MFT 拆分 AAC 音频通道【英文标题】:Splitting AAC audio channels via MFT 【发布时间】:2020-06-30 12:54:21 【问题描述】:

我正在创建一个 MFT 来处理超过 6 个通道的 AAC 流(因为 Windows 中的 AAC 解码器最多只能处理 6 个)。我计划仍然使用 Microsoft AAC 解码器,但我将首先获取 AAC 流并将通道分成 6 个组,然后再将它们传递给 AAC 解码器的多个实例。

有人知道这是否可能吗?我一直在查看 AAC 规范,发现每个通道都有 ICS 部分(我假设所有通道都是独立的),所以我希望我可以读取字节流,提取 ICS,然后生成新的流来传递到 AAC 解码器。

在开始之前,我想知道是否有人以前尝试过,或者可以判断这在理论上是否可行?

谢谢,

【问题讨论】:

你说的“6人组”是什么意思,例如AAC可以携带6+6? 抱歉,我的意思是如果我有一个带有 16 个音频通道的 AAC 音轨的 MP4,我可以将它分成 6、6 和 4 个通道,并使用 3 个 Microsoft AAC 解码器来解码这些通道进入 PCM/浮动通道。 【参考方案1】:

我认为您不能将 AAC 比特流“拆分”为“6 个通道组”。这不是事物最初的设计方式。尽管 AAC 提供了对 up to 48 channels 的支持,这是我自己不记得看到的,但比特流要在解码域中拆分之前进行解码。 Microsoft 的股票编解码器仅限于支持 5.1 音频,因此无法处理轨道内的其他通道配置。您可以有多个轨道,每个轨道都带有 5.1 音频,在这种情况下,股票解码器适用。

要支持库存解码器无法处理的 AAC 编码,您必须提供从头开始构建的备用 AAC 解码器(即与现有库存 MFT 无关)并打包为新的单独 MFT。或者您需要以一种特殊的方式准备一个媒体文件,使每个音轨都适合于股票解码器。

【讨论】:

感谢 Roman,这很有道理。我想我会研究 Opus,因为它似乎更适合支持多个独立的音频通道(使用映射系列 = 255 选项)并且可以访问 c++ 解码库。再次感谢! @AndrewRH 无论您使用哪种编解码器,您都可以单独对频道进行编码。我认为这里的重点是这些编解码器通常利用频道通常具有相似内容的事实。如果你想在同一个流中分离轨道,分别编码/解码,你通常会浪费带宽。

以上是关于通过 MFT 拆分 AAC 音频通道的主要内容,如果未能解决你的问题,请参考以下文章

视音频数据处理入门:AAC音频码流解析

如何使用 AVAssetWriter 在 ios 中写入 AAC 音频?

如何使用 FFmpeg (C/C++) 将原始 pcm_f32le 音频编码为 AAC 编码音频?

实时AAC音频/本地AAC音视频硬解码详细介绍附带Demo

使用 libavcodec 将音频编码为 aac

AAC音频编码 相关的原理和设置