FFmpeg音视频开发基础与实战
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

4.4.2 MP3编码标准

如前文所述,MP3 不仅是一种音频文件的封装格式,而且是音频编码标准。在 1993 年制定完成并发布的MPEG-1标准中主要包括以下几部分内容。

◎ 系统(System)。

◎ 视频(Video)。

◎ 音频(Audio)。

◎ 一致性测试(Conformance Testing)。

◎ 参考软件(Reference Software)。

其中,“音频”部分就定义了对MP3音频格式的解码标准。随着技术的发展,在随后发布的MPEG-2标准中,MP3编码标准得到进一步扩展,支持更多的码率和更多的声道数。此外,在另一个并未作为正式标准发布的MPEG-2.5中对MP3编码标准做了进一步扩展,提供对更低码率的支持。

在MPEG-1的音频部分,根据压缩效率和算法复杂度,共定义了Layer1、Layer2和Layer3三个层级。层级越高,压缩效率越高,同时算法越复杂。不同层级的压缩率和码率如表4-8所示。

表4-8

从表4-8中可知,作为一种有损压缩算法,MP3可取得12倍的压缩比,并且可避免造成听觉上的显著失真。同时,为了得到更高的压缩比,MP3编码标准使用了多种复杂的算法,本节仅讨论其中的若干主要模块。

1.多相子带滤波器组

根据奈奎斯特采样定理,采样频率至少应当达到信号最高频率分量的两倍以上,否则将导致频域混叠、采样失真。若MP3的采用率为44.1kHz,则可支持信号的频率范围为0~22.05kHz。MP3 在对一个帧内的1152个PCM音频采样数据进行编码时,通过一个多相子带滤波器组将0~22.05kHz 的频率范围分割为32个频率子带,每个频率子带的频率宽度约为 22050Hz/32 即689Hz,每个频率子带的频率范围如下。

◎ 子带0:0~689Hz。

◎ 子带1:690 Hz~1378Hz。

◎ 子带2:1379Hz~2067Hz。

……

每个子带中都保存了指定频率范围的PCM音频采样数据的分量,包含1152个时域采样点。相比于原始输入的PCM音频采样数据,整体的采样点数量增长了32倍。为了与原始输入的PCM音频采样数据的数据量一致,每个子带仅保留1/32的采样点值,即36个。

2.信号加窗与MDCT

多相子带滤波器所划分的频率子带是等带宽的,此特性与心理声学模型的要求并不完全符合。为了解决这个问题,MP3在编码时对多相子带滤波器的输出进行了处理,即使用改进离散余弦变换(Modified Discrete Cosine Transform,MDCT)。通过改进离散余弦变换,多相子带滤波器的32个频率子带中的每一个子带都将被进一步分割为18个频率线,即总共576个频率线,对应一帧中的一个编码颗粒。

由于在采样信号的处理中使用了时域截取信号,因此其截取边缘的信号突变可能引入附加的人造干扰信息。为了抑制此类干扰信息,多相子带滤波器的输出在改进离散余弦变换之前,需要进行加窗处理。MP3 定义了 4 种不同的窗类型,分别为长窗、开始窗、短窗和结束窗。4种窗的波形特点如图4-15所示。

心理声学模型根据频率子带内的信号特性决定实际选择的窗类型。

◎ 如果当前帧的某频率子带内的信号与前一帧大体一致,则使用长窗,以提升MDCT的频域分辨率,使变换结果更精细。

◎ 如果当前帧的某频率子带内的信号与前一帧相比发生了较大变化,则使用短窗。相比于长窗,短窗可以提升MDCT的时域分辨率,有助于防止预回声等干扰信息。当使用短窗模式时,通常使用3个叠加的短窗来代替一个长窗。

◎ 开始窗和结束窗用在长窗和短窗之间。当一个长窗后面紧跟一个短窗时,长窗变为开始窗;反之,当一个短窗后面紧跟一个长窗时,长窗变为结束窗。

图4-15

3.心理声学模型

人对声音的感知原理十分复杂,例如,在安静的环境中我们可以清楚地听到夏日的午后蝉鸣,然而在机器轰鸣的工厂厂房内则几乎听不到其他声音。由此可见,人对声音的感知并非完全取决于声音的频率和强度等特性,而是可以根据音源和环境动态适应,此现象即人的听觉掩蔽效应。

为了在尽量不影响主观听觉效果的前提下提升压缩编码的性能,MP3引入了心理声学模型作为编码的核心模块之一。MPEG-1 Audio提供了两种心理声学模型。

◎ 模型1:运算简单,适用于高码率场景。

◎ 模型2:运算复杂,适用于低码率场景,是MP3编码的推荐选项。

在使用心理声学模型处理之前,音频采样值通过多相子带滤波器输出之后,通过1024点和256点快速傅里叶变换(FFT)即可转换为频域。通过分析频域信号,心理声学模型产生以下信息供后续编码时使用。

◎ 感知熵(PerceptualEntropy,PE):用于判定信号窗的切换。

◎ 信掩比(Signal-to-MaskRatio,SMR):决定量化编码时的比特数分配。

4.非均匀量化

音频信号采样在经过加窗处理和改进离散余弦变换后,需要在编码前对获取的频率线信息进行量化处理。MP3编码所使用的量化方法为非均匀量化。非均匀量化需要两类输入信息,即改进离散余弦变换输出的频率线信息和心理声学模型输出的掩蔽信息。在编码时,量化与编码一次处理一个编码颗粒中的576个采样的频域采样值,处理过程大致可以用两层嵌套的循环处理表示。

◎ 码率控制循环,即内层循环。

◎ 混叠控制循环,即外层循环。

内层循环执行频域数据的实际量化过程。量化过程输出的量化值的取值范围与量化步长呈负相关关系,即对相同的频域数据,量化步长越大,输出的量化数据越小;反之,量化步长越小,输出的量化数据越大。

由于MP3所使用的哈夫曼编码对量化数据的取值范围有限制,即超过该限制的量化数据无法通过预定义的哈夫曼编码表,因此内层循环在执行过程中,使用量化步长递增的方式循环执行,直到获得长度为哈夫曼编码表所支持的量化步长。随后在对频率量化数据进行哈夫曼编码的过程中,如果输出的码流长度超出了当前帧允许的最大比特数,则循环终止,只有在提升量化步长后才能继续量化、编码。

外层循环的主要作用是控制内层循环在量化过程中产生的量化失真。由于量化失真在理论上无法彻底消除,因此外层循环希望通过检测内层循环的输出来控制每个频段的量化噪声。量化和编码中允许的噪声阈值由心理声学模型决定。每次在执行内层循环之前,编码器都记录针对该频段当次循环的比例因子。在该次内层循环结束后,如果输出的噪声超出了允许的阈值,则增加该频段的比例因子并重新执行内层循环。经多次循环后,使得所有频段的量化噪声均低于允许的阈值,即量化造成的整体失真已几乎无法被人的听觉所感知,此时外层循环结束并退出。

5.熵编码

MP3编码器对量化的输出数据使用哈夫曼编码进行熵编码。作为基于概率统计特性的变长编码,哈夫曼编码的关键因素在于对应了输入元素与输出码流的哈夫曼编码表。为了进一步提升编码效率,MP3 编码标准对传统的哈夫曼编码进行了大量的优化和改善。在 MP3 编码标准中共定义了32张哈夫曼编码表,包括30张大数值码表和2张小数值码表,不同的码表适用于不同数据频段的编码。

由于是对频域的量化采样数据进行编码,所以待编码的数据呈现典型的频域分布特征,即低频部分的数据绝对值较大,而高频部分的数据绝对值较小,甚至多数为零。为了更加有效利用该特点,MP3编码标准将整个频率区间(即直流部分到奈奎斯特频率的区间)分为以下3部分。

◎ 大值区:量化数据绝对值大于1的区域。

◎ 小值区:量化数据绝对值小于或等于1的区域。

◎ 零值区:量化数据为0的区域。

对于大值区的量化数据,将每两个量化绝对值为一组进行哈夫曼编码。由于大值区的量化绝对值相对占据的长度更大,因此每两个量化绝对值组成的码元将被进一步细分为三个长度不定的区域,即Region0、Region1和Region2,每个区域都可以使用不同的码表进行编码。对于小值区的量化数据,将每四个量化绝对值为一组进行哈夫曼编码。在哈夫曼编码后,整个输出的码流区域结构如图4-16所示。

图4-16