音频格式的介绍文章系列:
音频编解码格式介绍(1) ADPCM:adpcm编解码原理及其代码实现
音频编解码格式介绍(2) MP3 :音频格式之MP3:(1)MP3封装格式简介
音频编解码格式介绍(2) MP3 :音频格式之MP3:(2)MP3编解码原理详解
音频编解码格式介绍(3) AAC :音频格式之AAC:(1)AAC简介
音频编解码格式介绍(3) AAC :音频格式之AAC:(2)AAC封装格式ADIF,ADTS,LATM,extradata及AAC ES存储格式
音频编解码格式介绍(3) AAC :音频格式之AAC:(3)AAC编解码原理详解
本文主要介绍AAC简介
AAC(Advanced Audio Coding),中文名:高级音频编码。出现于1997年,基于MPEG-2的音频编码技术。由Fraunhofer IIS、杜比实验室、AT&T、索尼等公司共同开发,目的是取代MP3格式。
2000年,MPEG-4标准出现后,AAC重新集成了其特性,加入了SBR技术和PS技术,为了区别于传统的MPEG-2 AAC又称为MPEG-4 AAC[1]。使得 AAC规格有三种:AAC,HE-AAC(AACPlus v1),HE-AAC v2(AACPlus v2)其关系如下:
HE:“High Efficiency”(高效性)。HE-AAC v1(又称AACPlusV1,SBR),用容器的方法实现了AAC(LC)和SBR技术。SBR其实代表的是Spectral Band Replication(频段复制)。简要叙述一下,音乐的主要频谱集中在低频段,高频段幅度很小,但很重要,决定了音质。如果对整个频段编码,若是为了 保护高频就会造成低频段编码过细以致文件巨大;若是保存了低频的主要成分而失去高频成分就会丧失音质。SBR把频谱切割开来,低频单独编码保存主要成分, 高频单独放大编码保存音质,“统筹兼顾”了,在减少文件大小的情况下还保存了音质,完美的化解这一矛盾。
HEv2:用容器的方法包含了HE-AAC v1和PS技术。PS指“parametric stereo”(参数立体声)。原来的立体声文件文件大小是一个声道的两倍。但是两个声道的声音存在某种相似性,根据香农信息熵编码定理,相关性应该被去 掉才能减小文件大小。所以PS技术存储了一个声道的全部信息,然后,花很少的字节用参数描述另一个声道和它不同的地方。
LC-AAC,HE-AAC,HE-AAC v2比特率和主观质量之间的关系。由图可见,在低码率的情况下,HE-AAC,HE-AAC v2编码后的音质要明显好于LC-AAC[2]
目前主流使用的AAC编码器有下面几种[3],分别是:
1、Nero AAC 编码器:Nero AG开发的“ Nero AAC 编解码器”具有专有许可证[12],并且不适用于这些操作系统能够运行的整个硬件架构。Nero 不再开发此编码器,但该软件包仍然可用,并且它仍然是 AAC 编码的高质量选项。
代码网址:https://www.rarewares.org/rrw/neroaac.php
2、FAAC 编码器: 一种命令行编码器,属免费自由软件,支持AAC Main 主规格、AAC LC 低复杂度规格和AAC LTP 长时期预测规格。解码器为FAAD
代码网址:https://faac.sourceforge.net/
3、QuickTime / iTunes 内置AAC编码器:Apple 公司两款软件都提供AAC编码功能,其编码技术来自”Dolby Laboratories”(杜比实验室)。
代码网址:https://github.com/nu774/qaac
4 FDK AAC Fraunhofer FDK AAC是一个开源库,用于以高级音频编码(AAC) 格式编码和解码数字音频。Fraunhofer IIS为Android 4.1开发了这个库。它支持多种音频对象类型,包括MPEG-2和MPEG-4 AAC LC、HE-AAC (AAC LC + SBR )、HE-AACv2 (LC + SBR + PS ) 以及AAC-LD(低延迟)和 AAC-ELD(增强型低延迟)用于实时通信。编码库支持高达 96 kHz 的采样率和多达8 个通道(7.1 环绕声)。ffmpeg外挂aac编解码库选用fdk aac。
代码网址:https://github.com/mstorsjo/fdk-aac
5 libavcodec原生 AAC编码器(由FFmpeg和Libav维护的单独版本)是实验性的,但至少在某些测试中被认为“比 vo-aacenc 更好”。它由 Konstantin Shishkov 编写,并在 LGPL 2.1 版本下发布。FFmpeg 版本的 libavcodec 中使用的 AAC 编码器在 FFmpeg 3.0 版本中得到了显着改进,不再被视为实验性的。Libav 尚未合并这项工作。
6 libvo_aacenc,Android VisualOn AAC 编码器。该编码器在 Android 中被上面提到的 FDK AAC 编码器取代,被认为是质量较差的选项。
7(非自由)libaacplus [20]实现了高效高级音频编码
概括来说,目前使用最多是Nero AAC 编码器,其次是QuickTime / iTunes 内置AAC编码器和FAAC 编码器。相比之下,FAAC 编码器在声音高频部分要比Nero AAC好些,而在中低频下FAAC音质则不如Nero AAC,至于QuickTime / iTunes AAC则走中间路线,介乎这两者之间。
根据不同的编码技术,AAC 的编码分为九种规格
Main 和 LC 框架是变化编码算法,采用 MDCT 作为其时/频分析模块,SSR 框架则采用混合滤波器组,先将信号等带宽地分成 4 个子带,再作 MDCT 变换。在三种方案里,通过选用不同模块在编码质量和编码算法复杂度之间进行折衷。
4. MPEG-4 AAC LC 低复杂度规格(Low Complexity)
5. MPEG-4 AAC Main 主规格,包含了除增益控制之外的全部功能,音质最好
6. MPEG-4 AAC SSR 可变采样率规格(Scaleable Sample Rate)
7. MPEG-4 AAC LTP 长时期预测规格(Long Term Prediction)。在 Main Profile 的基础上增加了前向预测。
8. MPEG-4 AAC LD 低延迟预测规格(Low Delay)。AAC 是感知型音频编解码器,可以在较低的比特率下提供很高质量的主观音质。但是这样的编解码器在低比特率下的算法延时往往超过 100ms,所以并不适合实时的双向通信。结合了感知音频编码和双向通信必须的低延时要求。可以保证最大 20ms 的算法延时和包括语音和音乐的信号的很好的音质。
9. MPEG-4 AAC HE 高效率规格(High Efficency)。混合了 AAC 与 SBR(Spectral Band Replication,频段复制)技术。而新版本的 HE,即 HE v2 是 AAC 加上 SBR 和 PS(Parametric Stereo,参数立体声)技术。这样能在同样的效果上使用更低的码率。在编码码率为 32-96 Kbps 之间的音频文件时,建议首选这种规格。适合用于低码率编码
在上述规格中,主规格(Main)包含了除增益控制之外的全部功能,其音质最好,而低复杂度规格(LC)则是比较简单,没有了增益控制,但提高了编码效率。至于“SSR”对“LC”规格大体是相同,但是多了增益的控制功能。
①提升的压缩率:可以以更小的文件大小获得更高的音质[1];
②支持多声道:可提供最多48个全音域声道;
③更高的解析度:最高支持96KHz的采样频率;
④提升的解码效率:解码播放所占的资源更少;
杜比实验室的结论
①128Kbps的AAC立体声音乐被专家认为不易察觉到与原来未压缩音源的区别;
②AAC格式在96Kbps码率的表现超过了128Kbps的MP3格式;
③同样是128Kbps,AAC格式的音质明显好于MP3;
④AAC是唯一一个,能够在所有的EBU试听测试项目的获得“优秀”的网络广播格式。
总的来讲,AAC可以说是极为全面的编码方式,一方面,多声道和高采样率的特点使得它非常适合DVD-Audio;另一方面,低码率下的高音质则使它也适合移动通讯、网络电话、在线广播等领域,真是全能的编码方式。
[1] : 百度百科AAC
https://baike.baidu.com/item/AAC/382962?fr=ge_ala
[2]:AAC规格(LC,HE,HEv2)及性能对比
https://blog.csdn.net/leixiaohua1020/article/details/11971419
[3]:FAAC
https://en.wikipedia.org/wiki/FAAC
[4]:主流使用的AAC编码器