音频开发之AAC

AAC,全称为Advanced Audio Coding,是一种有损音频压缩编码方式,是目前互联网音频编码格式的主流选择,本文对AAC进行系统性的介绍,希望可以在开发和使用AAC的时候有些许帮助。

背景

声音是我们人类信息交换的最重要的两个形式之一,另外一个是图像。我们知道自然界中的声音是一种模拟信号,如何将模拟信号转换为数字信号以便于进行传输和存储?可以参考《音频开发之PCM》做了详细介绍。

受限于传输带宽和存储资源,音频编码算法专家一直致力通过更高的压缩比提供更好的音质效果,从无损压缩LPCM,到针对语音通信的G711,以及后来用于音乐的MP3,从未停止。

想要提高压缩比,而不损失音质,压缩编码算法的改进和提升主要源于以下两个方面:

  • 心里声学的深入研究。比如人耳只能感受到频率在范围是[20,20K]Hz内的声音,所以这个频率以外的声音可以直接忽略;比如人的大脑对与高频的声音精确度敏感性会下降,所以对高频声音可以用更粗略的数值表示。
  • 信息编码算法的提升。通过各种算法模型组合,将信息熵提高,在需要解压缩的时候再还原。

为了在MP3的基础上进一步提高压缩比,而且能在更低的码率下有更好的音质表现,由贝尔实验室,杜比实验室等研究机构联合开发了AAC编码压缩方案,并由ISO MPEG进行标准化,先后发布在MPEG-2和MPEG-4两个标准中。

进程

至今ISO MPEG关于AAC发布了两次标准:

  • 1997年,ISO MPEG组织对AAC编码方案进行了标准化,并在MPEG-2 Part7定义了标准规范,命名为ISO/IEC 13818-7:1997
  • 1999年,ISO MPEG组织对AAC编码方案进行了升级,并在MPEG-4 Part3中定义了标注规范,命名为ISO/IEC 14496-3:1999

考虑到硬件能力有差异,使用场景对于音频需求也不尽相同,所以ISO MPEG在定义音频和视频的时候,使用了Profile(配置)这个概念。不同的Profile代表着使用不同的编码算法集,也对硬件的运算能力提出了不同的要求。类似的还有H.264和H.265的Profile概念。

MPEG-2 Part7中定义了三个AAC的Profile:

Profile 简称 描述
Low-Complex AAC-LC 这个是最基本的配置,也是被广泛使用的,后面提到的HE-ACC就是基于这个Profile来的
Main AAC-Main 增加了向后预测编码技术,可以进一步提高压缩比
Scalable Sampling Rate AAC-SSR  

在MPEG-4 Part3中的主要改进是:

  • 引入Audio Object Type(AOT)类型。通过AOT类型标记,可以让不同编码算法处理的数据(AAC Main, AAC LC, AAC SSR, TwinVQ, CELP等)有统一处理方式,可以有更灵活的组合编码方案。
  • 提出Perceptual Noise Subsitution, PNS,感知噪音替代技术

AAC-LC作为最基本的配置,在AAC的发展中有过两次重大技术性升级:

  • HE-AAC,又叫accPlus1或者EAAC,增加SBR(带宽扩展)技术,使得编解码器可以在比原来少一半的码率的情况下得到相同的音质。
  • HE-AAC v2, 又叫accPlus2或者EAACPLUS, 增加PS(参数立体声)技术,能在低码率情况下得到极佳的音质效果,比如48kbps下得到CD的音质。

从覆盖的维度上看,它们的关系如下图:

HE-AAC

从时间的维度上看,它们的关系如下图:

HE-AAC

最近,ISO MPEG又给AAC增加了一个新成员xHE-AAC(Extended High Efficiency AAC)。

xHE-AAC非常适合应用在音频内容类型多样的场景下使用,比如广播,流媒体,播客等,它们的内容涵盖了语音对话,语音和音乐混合,还有声音场效,以及纯音乐等。因为xHE-AAC的极限码率很低(立体声最低12kbps,单声道6kbps),而且可以实时无缝切换比特率,所以特别适合在带宽不稳定的蜂窝网络下使用,达到当前的网络下最好的音质效果。

特性

AAC是作为MP3的继任者,相对MP3的优势有很多,下面罗列几个重要的:

  • 采样率支持更广。AAC是[8,96]Khz, MP3是[16,48]Khz。
  • 通道数量支持更多。 AAC最多是48个通道,MP3在MPEG-1模式下最多支持双通道,在MPEG-2模式下最多支持5.1通道。
  • 比特率动态调节和帧长可变。
  • 更简单高效的滤波器。AAC使用纯MDCT转换,而MP3使用混合编码,包括部分MDCT和部分FFT。
  • 对平稳信号有更高的编码效率。AAC使用1024或者960采样块大小,MP3使用576采样块大小。
  • 对瞬态信号有更高的编码精度。AAC使用128或者120采样块大小,MP3使用192个采样块大小。
  • 对于16KHz频率以上的声音有更好的处理效果。
  • 更灵活的联合立体声,可以对不同的频率范围使用不同的编码方式。
  • 模块化操作。可有选配不同的模块进行联合编码,比如TNS,Backwards Prediction, PNS等,更灵活也更好的提高压缩比。

总体来讲,因为AAC的标准规范在设计上有更多的灵活性,也带来了更多的编码策略实现的可能性,从而提升编码效率和压缩比。虽然如此,AAC也不是说就全面超过MP3,因为MP3标准虽然已经过时,但是这么多年的使用已经体现了它的健硕性。在低码率的情况下,特别是128kbps以下,AAC和HE-AAC的音质要比MP3明显要好。

专利

AAC专利规定,用户对AAC编码格式的内容进行传输和分发,是不需要收取任何费用的,加上当时是MP3还在专利保护期,让AAC成为比MP3更有吸引力的选择。但是对于面向消费者的编码器生产者或者开发者需要收取专利费,因为开源软件引用了MPEG4中的代码,为了避免专利问题,只能将软件通过代码的形式进行开源。

Via是杜比实验室的一家独立管理子公司,是一家拥有50多年创新和技术授权经验的公司。Via Licensing 管理一种联合专利授权,这为获权使用一组授权人的必要AAC专利提供了一种方便而又经济高效的方法。AAC 专利授权计划涵盖下图中确定的所有 AAC 技术。

AAC Via Licensing

开源编解码器介绍

开源世界里,也有不少根据AAC标准实现的编解码器,但是因为涉及上述专利问题,大部分是源码开放的,有的还在更新,有的已经停止维护了,这里我们介绍一些知名的开源AAC编解码器

FAAC

Freeware Advanced Audio Coder,MPEG-4和MPEG-2 AAC编码器,目前的编码效果和当前最好的AAC编码器还有明显的差异。特性主要是跨平台,速度还比较快,但仅支持LC, Main, LTP三种Profile。

官网地址

FAAD2

MPEG-4和MPEGMPEG-2 AAC解码器, 基于GPLv2 license发布,和FAAC类似,但是支持的Profile更广,比如SBR, PS的支持。

官网地址

Nero AAC

Nero AG开发,可以在非商业用途中使用,在官方测试中它的分数仅次于苹果公司的AAC编解码器,名列第二。Profile支持MPEG-4 AAC LC, HE-AAC, HE-AAC v2。

更多介绍

目前该项目已经停止开发维护。

FDK AAC

Fraunhofer FDK AAC, 是为了Android平台设计开发的,但是目前已经被广泛移植到其他平台上进行使用。FDK AAC和Nero AAC支持的Profile几乎相同,成为已停止开发的Nero AAC的最佳替代方案。

libfdk_aac是对FDK AAC的重新封装,以便FFMPEG可以进行调用。

更多介绍

libavcodec

FFMPEG自己开发的编解码库,支持AAC,基于LPGL发布。通过评测和使用来看,认为它的编解码效果非常一般。

更多介绍

afconvert

苹果公司开发的,被公认为在中等码率CBR和VBR下LC AAC质量表现最好的编解码器,afconvert是在MacOS下提供的命令行工具。

更多介绍

参考资料