AAC 与 Opus 编码解码流程详解
AAC(Advanced Audio Codec)和 Opus 是两种常用的音频编码格式,各自在不同的应用场景中都有广泛使用。下面是它们各自的编码和解码流程的详解:
AAC 编码流程
分帧:
- 输入音频信号被分割成固定大小的帧。通常情况下,AAC 使用 1024 个采样点为一个帧。
窗口化:
- 使用窗函数(例如 Hann 窗)对每帧进行加窗,以减少频域泄漏。
MDCT(修正离散余弦变换):
- 将时间域信号转换到频域。这种变换能有效压缩连贯音频信号。
量化和编码:
- 对变换后的频域系数进行量化,减少不重要的细节,通过熵编码(如 Huffman 编码)进一步压缩数据。
心理声学模型:
- 利用人耳的听觉特点掩盖不容易被察觉的噪声,从而提高压缩效率。
比特流格式化:
- 对编码数据进行封装,形成 AAC 比特流,用于存储或传输。
AAC 解码流程
比特流解析:
- 从 AAC 文件中提取出编码数据。
熵解码:
- 对压缩的频域数据进行熵解码,获得量化后的频谱系数。
逆量化:
- 将量化后的频谱系数复原到更接近原有精度。
IMDCT(逆修正离散余弦变换):
- 将频域数据转换回时间域。
重叠-加窗:
- 对解码后的帧进行窗函数的逆过程,并将相邻帧重叠并累加,得到连续的音频信号。
Opus 编码流程
输入处理:
- 原始音频分割为帧,Opus 支持不同的帧大小(如 2.5 ms 到 120 ms)。
预处理:
- 自动增益控制和其他信号处理增强。
频域和时域编码:
- Opus 综合使用 CELT(用于音乐,以 MDCT 为基础)和 SILK(用于语音,以预测编码为基础)技术,根据内容自动选择。
量化:
- 将频谱系数或预测参数进行量化处理。
比特流形成:
- 对量化数据和编码参数进行封装生成可传输的 Opus 比特流。
Opus 解码流程
比特流解析:
- 从 Opus 数据流中提取帧信息和编码参数。
解码过程:
- 解码器根据帧内容(语音或音乐)选择使用 SILK 解码或 CELT 解码。
逆量化:
- 将量化后的数据复原。
合成:
- 对时域信号进行合并,恢复连续音频。
后处理:
- 应用增益调整和抗抖动处理,优化输出音质。
无论是 AAC 还是 Opus,编码和解码流程的目标都是在尽可能保留音质的前提下,最大程度地压缩数据,以便存储或传输。两个标准各有优点,AAC 通常用于高质量音频应用,如 Apple 的 iTunes 和影音流媒体,而 Opus 则在实时通讯如 VOIP 和 WebRTC 中表现出色。