MP3(MPEG-1/2 Audio Layer III),是由德国Fraunhofer协会(Fraunhofer IIS)主导开发的有损音频压缩编码格式,其技术核心是通过心理声学模型来去除人耳难以感知的音频数据冗余,在高性能压缩比下保持可接受的主观音质水平。
作为第一代获得大规模商业化普及的有损音频编码技术,MP3的发明是为了解决数字音频的存储与传输的速率和效率的问题。比如一首时长3分钟的CD标准的 16bit/44.1kHz 采样率的立体声PCM音频文件体积通常在30MB以上,而在1990s年代,主流的互联网接入带宽仅为64kbps~128kbps,存储介质的单碟容量也仅有数百MB,这意味着传输或存储一首无压缩音频文件,需要消耗数分钟甚至数十分钟的时间成本,极大的影响力音频数据的传输效率。
MP3技术通过 “感知编码”,在显著缩小文件体积的前提下,最大限度地保留了人耳实际感知度较高的音质细节。所谓感知编码,就是是基于人耳的听觉生理特性(即 “心理声学模型”),去除音频中对人耳听觉体验无实质影响的冗余数据。
MP3技术标准由国际标准化组织(ISO)下属的动态图像专家组(MPEG)统一制定,其技术规范的完整编号为 “ISO/IEC 11172-3”,定义了具体的编解码机制以及文件封装格式。从技术演进的顺序来看,MP3的技术发展经历了三个阶段:1993年,MPEG正式发布了MP3 技术的第一个版本标准MPEG-1 Audio Layer III;到1995年,“MP3” 这一正式名称才被确定下来,作为该技术的市场专属标识;1999 年,MPEG工作组对MP3技术标准进行了一次重要的版本迭代,发布了MPEG-2 Audio Layer III 标准,这一版本迭代没有改变核心的编码算法,而是重点扩充了技术适配的应用场景边界,新增了对16kHz、22.05kHz、24kHz 等低采样率的支持,同时更明确地适配多声道环绕声的应用场景。
MP3的编码流程,主要分为以下几个主要的处理步骤:
1)PCM音频采样及预处理
MP3编码器先将输入的模拟音频信号,转换为编码器可以处理的数字音频信号格式。
※ 采样率转换:编码器会先将输入的音频信号的采样率,统一转换为MP3标准支持的固定采样率。根据MPEG工作组发布的技术规范,MP3 编码器的标准输入采样率为 32kHz、44.1kHz 或 48kHz。其中,44.1kHz 是最常用的标准采样率,这一设置的技术逻辑,是与CD 音频的标准采样率完全对齐,从而完整覆盖人耳听觉的理论频率范围(20Hz~20kHz)。
※ 分帧处理:完成采样率转换后的数字音频信号,会被编码器分割为一系列连续的短时数据窗口,也就是常说的 “编码帧”。这一处理的核心逻辑是,音频信号的频谱特性在短时间内是相对稳定的,将长音频分割为短帧后,可以对不同特性的音频分段采用差异化的编码策略,从而在保证音质的前提下,优化压缩效率。根据MP3技术规范,每个编码帧的时长固定为约23毫秒,而每个编码帧所包含的音频样本数固定为 1152 个。
2)滤波器组与子带分析
为了更精准地分析音频信号的频谱特性,编码器需要将预处理后的音频信号,从时域信号转换为频域信号,该变换是一个由 32 个通道组成的多相正交镜像滤波器组(PQMF)来实现的。该滤波器组的核心作用,是将输入的宽频带音频信号,均匀地分割成32个等宽的连续频率子带,其目的是将音频信号的不同频率分量,精准分配到对应听觉敏感度的子带中,从而让后续的心理声学模型分析和比特分配策略,能更精准地适配人耳的听觉特性。
完成子带分割后,编码器会对每个子带的信号进行单独的频谱分析,计算出该子带信号的能量分布特性;然后这32个子带信号的频谱数据,输入到后续的MDCT变换模块中,进行进一步的频率精细度提升处理。
3)心理声学模型计算
这是MP3编码流程中最核心的环节,该步骤是通过数学模型精准模拟人耳的听觉生理特性,计算出每个子带信号的 “听觉掩蔽阈值”,作为编码器判断各子带信号中哪些频谱分量属于 “听觉冗余数据”、可以被压缩的依据。
※ 频谱分析:编码器会对每个编码帧的音频信号,进行一次高精度的快速傅里叶变换(FFT),将其时域波形信号转换为频域频谱数据。
※ 掩蔽阈值计算:基于FFT变换得到的频谱能量分布数据,编码器会在内置的两种标准心理声学模型(Model 1 或 Model 2)中,自动选择一个最合适的模型,进行掩蔽阈值的计算。
※ 比特需求分配:在完成掩蔽阈值的计算后,编码器会根据每个子带的掩蔽阈值深度,精准确定该子带的比特分配需求。简单来说,对人耳越敏感的子带或者掩蔽深度越低的子带,编码器会分配越多的比特资源;而对那些掩蔽深度较高、人耳不敏感的子带,编码器会分配较少的比特资源,甚至直接对该子带信号进行置零处理。
4)MDCT变换
MP3 编码器会对经过子带分割后的信号,应用一种被称为改进型离散余弦变换(MDCT)的技术,以实现更高的压缩效率。
MDCT是对每个子带内的音频信号进行二次变换,将其从 “子带时域” 信号,进一步转换为 “子带频域” 的频谱系数数据。通过该变换,可以将音频信号的能量分布,集中到少量的频谱系数上,从而更高效地压缩数据冗余。
与前两代MP3相关标准(Layer I 和 Layer II)相比,MP3的Layer III标准的MDCT变换模块的频率分辨率提升了约18倍 。
5)量化与比特分配
经过 MDCT 变换后得到的频谱系数数据,会被编码器送入量化模块,进行压缩处理。这是整个MP3编码流程中,唯一会产生音频数据损失的环节,也就是 “有损” 压缩的来源。
该步骤是根据心理声学模型模块输出的比特分配需求,对MDCT变换后的频谱系数数据进行差异化的量化精度压缩。具体来说,就是对那些人耳敏感的重要频谱分量,编码器会采用较高的量化精度,保留更多的信号细节;对那些人耳不敏感、被掩蔽深度高的频谱分量,则会采用较粗的量化精度,甚至直接将这部分频谱分量置零,以最大限度降低数据量。
为了在有限的比特资源下,实现最优的音质表现,MP3的编码器还采用了两项措施来提升量化的效率:
※ 比特池共享机制:允许编码器在不同的编码帧之间,动态地共享比特资源 —— 比如,当某一帧的音频信号比较简单,编码所需的实际比特数少于当前码率的预算时,编码器就会将这部分剩余的比特资源,存入一个公共的 “比特池” 中;而当遇到复杂的音频段落(如交响乐的合奏段落),编码所需的比特数超过当前码率的预算时,编码器就可以从这个 “比特池” 中,调用额外的比特资源,用来提升这一帧信号的量化精度。
※ 比例因子技术:在量化之前,编码器会先对每个子带的频谱系数数据计算出一个对应的比例因子,这个比例因子的作用是反映该子带信号的能量强度。在量化过程中,编码器会根据这一比例因子,对该子带的量化精度进行动态调整,对能量强度较高的子带,会分配更多的比特资源,对其进行更精细的量化处理;而对能量强度较低的子带,则会进行较粗略的量化处理。
6)熵编码与打包
为了进一步压缩频谱系数数据的冗余度,在完成量化处理后,编码器会对量化后的频谱系数数据,进行一次基于 Huffman 编码的无损压缩处理。编码器会先对量化后的频谱系数数据进行概率统计分析,将出现频率较高的频谱系数数据,用长度较短的Huffman编码码字表示;而将出现频率较低的频谱系数数据,用长度较长的Huffman编码码字表示,通过这一不等长编码策略,在保证无额外音质损失的前提下,将音频数据的整体冗余度再压缩约10%。编码器会将所有处理完成的音频数据,与编码时使用的所有技术参数(如码率、采样率、声道类型等),以及整个音频的同步和校验信息,按照MP3标准定义的帧格式,进行统一的封装打包。
MP3的文件结构,是一种基于“帧”的链式封装结构。MP3文件的整个封装格式,由两部分组成:一部分是位于文件头部的、长度固定为 4 字节的帧头,包含了该帧的编码标准版本、比特率索引值、采样率索引值、声道配置信息、帧数据长度及校验信息等;另一部分是紧跟在帧头之后的、长度可变的帧数据,包含了该帧经过完整编码后的音频数据。MP3文件还可以附加额外的元数据信息,比如常见的ID3元数据标签,就是以额外数据块的形式,附加在 MP3 文件的开头或结尾的,这一设计让MP3文件可以在存储音频数据的同时,携带完整的内容元数据,极大方便了用户对海量音频文件的识别、管理和检索。
为了适配不同的应用场景和音质需求,MP3的编码器通常支持三种主流的编码模式:
※ 恒定比特率(CBR)模式:在这一编码模式下,MP3编码器会在整个编码流程中,为每个编码帧分配完全相同的比特资源,无论音频信号的复杂程度如何,每个编码帧的压缩幅度都是完全一致的。
※ 可变比特率(VBR)模式:这是MP3编码器中最常用的编码模式,编码器会根据每个编码帧的音频信号复杂程度,动态分配该帧的比特资源上限。
※ 平均比特率(ABR)模式:这是一种介于 CBR 和 VBR 之间的折中编码模式,用户需要先设置一个目标的平均比特率数值;随后,编码器会在整个编码流程中,根据音频信号的复杂程度,动态调整各帧的比特率,但最终会将整个文件的实际平均比特率,严格控制在用户设置的目标值附近。
MP3定义了其适配的音频输入范围、压缩效率及对声道的支持能力等关键指标,其核心技术参数如下:
※ 采样率:MP3标准规定了三种基础采样率范围,分别是 32kHz、44.1kHz、48kHz,后续的MPEG-2版本扩充了对低采样率的支持,新增了16kHz、22.05kHz、24kHz三种窄带采样率格式,以适配语音类音频的编码需求。
※ 比特率支持:MP3标准的默认比特率范围是32kbps~320kbps。其中,128kbps是整个MP3格式的 “经典级” 通用标准比特率,而320kbps是MP3格式的最高级标准比特率。
※ 声道:MP3标准最初是为立体声场景设计的,因此原生支持单声道和双声道立体声。但在后续的MPEG-2版本中,新增了对 5.1 声道、7.1 声道等环绕声音频配置的支持。
※ 编码帧时长:MP3的编码是基于帧处理的,每个编码帧的时长固定为约23毫秒 。这一数值是综合了频率分辨率、时间分辨率和算法计算复杂度三者后的最优选择;每帧所包含的音频样本数,固定为1152个,是为了保证后续的滤波器组和MDCT变换的处理流程更高效。
MP3已经出现了30多年,在互联网、流媒体、音频内容制作、消费级音频存储与嵌入式设备等场景均应用广泛,但新设备、新应用中的使用越来越少。