音视频学习(五十):音频无损压缩
音频无损压缩是一种在不损失任何原始音频信息的前提下,减小音频文件大小的技术。它与有损压缩(如MP3、AAC)不同,后者通过删除人耳听不见的音频信息来大幅压缩文件,但会导致音质下降。无损压缩的目标是在保持原始音频质量的同时,尽可能地提高存储效率。
基本原理
无损压缩的核心思想是识别和消除音频数据中的冗余。这种冗余主要体现在以下几个方面:
- 时间域冗余: 音频信号在短时间内往往具有相似的波形。例如,一个持续的音符在短时间内可以被预测。
- 频率域冗余: 某些频率分量在一段时间内是高度相关的,或者可以被有效地建模。
- 统计冗余: 某些数据模式或比特序列出现的频率比其他模式更高。
无损压缩算法通常会综合利用这些冗余,通过预测、变换和编码等一系列步骤来压缩数据。
预处理阶段
音频帧划分(Framing)
音频数据以连续 PCM(Pulse Code Modulation)采样点形式存储。为了便于分析与建模,压缩算法会先将数据划分为多个 定长或变长的帧,每帧通常包含数百到数千个采样点。
- 定长帧:简单实现,压缩率稍低;
- 可变长度帧:复杂但适应性强,能提高压缩效果。
通道处理(Channel Decorrelation)
对于立体声或多通道音频,左右声道之间往往存在高度相关性。此时可以应用中-边(Mid/Side)编码,将:
- Mid(中) = (L + R) / 2
- Side(边) = (L - R) / 2
这样的变换可以显著减少冗余,提高压缩效率。
线性预测建模(Linear Prediction)
音频信号通常具有短时相关性,即当前样本可以用前面若干个样本进行预测。线性预测分析(LPC)正是基于此原理。
LPC建模原理
假设音频样本为 x[n],可用如下公式预测:
残差计算(Prediction Residual)
预测误差(即残差)是:
因为残差的幅度通常远小于原始信号,所以编码残差的代价更小。
LPC系数求解方法
常见算法包括:
- Levinson-Durbin 递归法;
- Burg 算法;
- 矩阵最小二乘法。
熵编码(Entropy Coding)
残差信号仍需进一步压缩。熵编码是一种无损压缩编码技术,根据数据符号的概率分布,使用尽可能短的比特串表示高频出现的符号。
常用方法包括:
Rice编码(Golomb-Rice)
- 适合小整数分布,计算简单;
- 主要用于FLAC等格式;
- 将每个残差值分为商和余数部分,用二进制方式编码。
Huffman编码
- 构造一棵最优前缀树;
- 根据符号频率生成不等长编码;
- 在ALAC、WAVPACK中常用。
算术编码(Arithmetic Coding)
- 精度更高,但计算更复杂;
- 稀有用于音频无损压缩(多用于视频压缩或文件压缩)。
误差控制与流同步(可选步骤)
CRC 校验
每帧或每数据块可以附加循环冗余校验码(CRC),用于数据完整性检测。
同步码与帧头信息
为了支持流式传输和断点恢复,许多无损格式(如 FLAC)会为每一帧添加帧头,包含:
- 帧起始码;
- 采样率、通道数;
- 块大小;
- CRC 校验等。
封装与元数据
无损音频格式通常需要将压缩数据与元数据封装成一个整体文件。
元数据包括:
- 采样率、通道数、量化位数;
- 标签信息(如歌手、专辑、封面图);
- Seek Table(快速定位索引);
- 编码器版本等。
封装格式
- FLAC 使用原生 FLAC 流封装;
- ALAC 使用 MP4(M4A)封装;
- WavPack 可使用自己的封装或嵌入 RIFF/WAV;
- APE 使用 Monkey’s Audio 专用格式。
流程图
原始 PCM 数据↓
[帧划分] ←→ [通道预测]↓
[LPC 预测建模]↓
[残差计算]↓
[熵编码(如 Rice/Huffman)]↓
[封装帧头、元数据]↓
输出压缩音频文件(FLAC/ALAC/APE等)
解码过程(反向处理)
音频无损解码过程为压缩流程的完全反向操作,依次执行:
- 解析封装格式;
- 解出帧头信息和熵编码数据;
- 反熵解码 → 得到预测残差;
- 使用预测系数恢复原始PCM;
- 重建通道结构、拼接音频帧。
因为是无损压缩,解码后音频数据与原始输入数据逐位一致。
主流无损音频压缩格式
FLAC (Free Lossless Audio Codec)
FLAC 是目前最流行、应用最广泛的无损压缩格式。
- 技术特点:
- 主要采用线性预测技术,结合自适应系数和多种预测阶数,能高效地处理不同类型的音频。
- 使用Rice 编码对残差进行熵编码,这是一种专为整数数据优化的变长编码方法。
- 支持高达 24-bit/192 kHz 的高分辨率音频。
- 开源和免版税,这使其成为行业标准,被几乎所有主流播放器和设备支持。
- 优点: 压缩比高(通常在 30%-50%之间),解码速度快,兼容性极佳。
- 应用: 音乐流媒体服务(如 Tidal)、数字音乐商店(如 Bandcamp)、个人音乐收藏。
ALAC (Apple Lossless Audio Codec)
ALAC 是苹果公司开发的无损压缩格式,通常封装在 M4A 容器中。
- 技术特点:
- 原理与 FLAC 相似,也采用线性预测,但在实现上有所不同。
- 在早期的 AAC-LC 编码器中,ALAC曾被作为一部分技术,但现在它作为一个独立的格式存在。
- 优点: 在苹果生态系统(iTunes, iPhone, Apple Music)中无缝支持,压缩效率与 FLAC 相当。
- 应用: 苹果设备用户、iTunes 音乐库。
APE (Monkey’s Audio)
APE 是早期无损压缩格式的代表,以其极高的压缩比而闻名。
- 技术特点:
- 使用更复杂的预测模型和编码技术,旨在将文件压缩到极致。
- 优点: 压缩比通常高于 FLAC 和 ALAC。
- 缺点: 压缩和解压缩速度较慢,对计算资源要求较高。开源性不如 FLAC 普及,导致兼容性相对较差。
- 应用: 追求极致文件大小的用户,但目前已逐渐被 FLAC 取代。
WavPack
WavPack 是一种独特的无损压缩格式,因为它支持混合模式。
- 技术特点:
- 它能同时生成一个小的、有损的
.wv
文件和一个小的、仅包含差异数据的.wvc
文件。 - 用户可以只使用
.wv
文件进行播放,以节省空间;也可以结合.wvc
文件,完全恢复原始无损音频。
- 它能同时生成一个小的、有损的
- 优点: 灵活性高,兼顾了有损和无损的优点。
- 应用: 需要在不同场景下灵活选择音质和文件大小的用户。
与有损压缩的区别
比较 | 有损压缩 | 无损压缩 |
---|---|---|
是否丢失数据 | 是 | 否 |
典型格式 | MP3、AAC、OGG | FLAC、ALAC、APE |
压缩比 | 高(可达10:1) | 中等(约2:1~3:1) |
音质 | 有损(感知接近原声) | 原汁原味 |
用途 | 流媒体、移动设备播放 | 音频制作、存档、发烧音响 |