音视频学习(五十):音频无损压缩

音频无损压缩是一种在不损失任何原始音频信息的前提下,减小音频文件大小的技术。它与有损压缩(如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 专用格式。

流程图

bash 复制代码
原始 PCM 数据
      ↓
[帧划分] ←→ [通道预测]
      ↓
[LPC 预测建模]
      ↓
[残差计算]
      ↓
[熵编码(如 Rice/Huffman)]
      ↓
[封装帧头、元数据]
      ↓
输出压缩音频文件(FLAC/ALAC/APE等)

解码过程(反向处理)

音频无损解码过程为压缩流程的完全反向操作,依次执行:

  1. 解析封装格式;
  2. 解出帧头信息和熵编码数据;
  3. 反熵解码 → 得到预测残差;
  4. 使用预测系数恢复原始PCM;
  5. 重建通道结构、拼接音频帧。

因为是无损压缩,解码后音频数据与原始输入数据逐位一致

主流无损音频压缩格式

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)
音质 有损(感知接近原声) 原汁原味
用途 流媒体、移动设备播放 音频制作、存档、发烧音响
相关推荐
DogDaoDao20 分钟前
WebRTC前处理模块技术详解:音频3A处理与视频优化实践
音视频·webrtc·实时音视频·视频增强·视频前处理·3a算法·音频前处理
雪域迷影2 小时前
使用AssemblyAI将音频数据转换成文本
java·音视频·restapi·gson·assemblyai
木卯_THU2 小时前
TGD第九篇:三维应用——视频边缘检测
计算机视觉·音视频·边缘检测·遮挡检测·tgd·视频内容理解·视频边缘检测
xduryan3 小时前
1 - 视频处理IP核之Video In to AXI4-Stream
fpga开发·音视频
驭风少年君3 小时前
【视频内容创作】PR的关键帧动画
音视频·pr·视频剪辑·关键帧·内容创作
余俊晖3 小时前
图像、视频、音频多模态大模型中长上下文token压缩方法综述
人工智能·音视频
程序员老舅11 小时前
C++音视频开发:基础面试题
c++·ffmpeg·音视频·视频编码·h264·音视频编解码·视频解码
这儿有一堆花1 天前
VAST视频广告技术实现:从零开始搭建视频广告投放系统
音视频·html5
新镜1 天前
【Flutter】双路视频播放方案
flutter·音视频