音频编码

音频编码

编码标准概述

AAC(Advanced Audio Coding)
编码原理:基于MDCT(改进离散余弦变换)的感知编码
Profile:LC(Low Complexity)、HE(High Efficiency)、HEv2等
码率范围:32kbps-320kbps,常用128kbps
特点:压缩率高,质量好,广泛支持
应用场景:音乐流媒体、视频音频轨道、广播

Opus
编码原理:结合CELP(语音编码)和MDCT(音频编码)
码率范围:6kbps-510kbps,语音常用32kbps,音乐常用128kbps
延迟特性:可配置延迟(2.5ms-60ms),低延迟模式适合实时通信
特点:压缩率高,延迟低,开源免费
应用场景:WebRTC、VoIP、实时通信、音乐流媒体

G.711/G.722
G.711:对数PCM编码(A-law或μ-law),64kbps,有压缩但质量接近PCM
G.722:子带ADPCM编码,48/56/64kbps
特点:延迟极低,质量一般
应用场景:传统电话系统、VoIP

MP3(MPEG-1 Audio Layer 3)
编码原理:基于MDCT和感知编码
特点:广泛支持,但压缩率不如AAC
应用场景:音乐存储、播放

编码标准 码率范围 压缩率 延迟 质量 兼容性 专利
AAC 32-320kbps 中等 优秀 优秀
Opus 6-510kbps 很高 优秀 良好
G.711 64kbps 极低 一般 优秀
G.722 48-64kbps 极低 良好 良好
MP3 32-320kbps 中等 中等 良好 优秀

编码核心概念

关键参数

码率(Bitrate)
定义:每秒传输的比特数,单位kbps或Mbps
语音编码推荐码率
– 极低带宽:8-16kbps(Opus窄带)
– 语音通话:16-32kbps(Opus宽带)
– 高质量语音:32-64kbps
音乐编码推荐码率
– 低质量:64-96kbps(移动网络流媒体)
– 标准质量:128kbps(在线音乐标准)
– 高质量:192-256kbps(高保真音乐)
– 极高质量:320kbps(接近无损)
编码器码率对比(立体声音乐):
– AAC:128kbps可达接近CD质量
– Opus:128kbps质量优于AAC同码率
– MP3:需要192kbps才能达到AAC 128kbps质量
– G.711:固定64kbps(语音)

帧长度(Frame Size)
定义:编码器一次处理的音频样本数
常见值(以48kHz采样率为例):
– 2.5ms:120样本(超低延迟)
– 5ms:240样本(低延迟)
– 10ms:480样本(实时通信标准)
– 20ms:960样本(平衡延迟和效率)
– 40ms:1920样本(高效率,延迟较高)
– 60ms:2880样本(最高效率)
影响
– 帧长度越短,延迟越低,但压缩效率越低
– 帧长度越长,压缩效率越高,但延迟越高
选择建议
– 实时通话:10-20ms
– 视频会议:20ms
– 音乐编码:20-40ms
– 语音识别:10-20ms

编码器特定参数

Opus编码器参数
Application模式
voip:优化语音通话(低延迟、降噪)
audio:优化音乐质量(高保真)
lowdelay:超低延迟模式(实时交互)
复杂度(Complexity):0-10,默认10
– 0:最快编码,质量最低
– 10:最慢编码,质量最高
– 推荐:实时通话5-8,离线编码10
带宽(Bandwidth)
– narrowband:4kHz(8kHz采样)
– mediumband:6kHz(12kHz采样)
– wideband:8kHz(16kHz采样)
– superwideband:12kHz(24kHz采样)
– fullband:20kHz(48kHz采样)

AAC编码器参数
Profile
– AAC-LC:低复杂度,最常用
– HE-AAC(AAC+):高效率,低码率优化
– HE-AACv2(eAAC+):增强型高效率,超低码率
量化质量(VBR质量):0.1-2.0
– 0.1-0.4:低质量(适合语音)
– 0.4-0.6:中等质量(适合一般音乐)
– 0.6-1.0:高质量(适合高保真音乐)

采样率转换

上采样(Upsampling)
– 提高采样率,需要插值填充新样本
– 不会改善音质,但可能需要用于格式转换
– 插值算法:线性插值、样条插值、sinc插值

下采样(Downsampling)
– 降低采样率,需要抗混叠滤波(Anti-aliasing)
– 会损失高频信息
– 适用于降低带宽和数据量

重采样算法
线性插值:速度快,质量一般
样条插值:速度中等,质量较好
sinc插值:速度慢,质量最好(理论上完美重建)

声道处理

单声道编码
– 数据量最小
– 适合语音通话、播客、有声书
– 码率需求低

立体声编码
简单立体声:左右声道分别编码
联合立体声(Joint Stereo)
Mid-Side编码:编码中置(M = L+R)和侧边(S = L-R)信号
强度立体声:高频使用单声道,低频使用立体声
– 优势:相同码率下质量更好,或相同质量下码率更低

多声道编码
– 5.1、7.1环绕声编码
– 使用声道耦合(Channel Coupling)技术
– 码率需求:约为立体声的2-3倍

编码延迟

编码器延迟来源
算法延迟:编码器需要缓冲一定数据才能开始编码
帧缓冲延迟:编码器按帧处理,需要等待完整帧
预处理延迟:滤波、变换等预处理操作

低延迟编码器
– 减少缓冲,但可能影响质量和压缩效率
– 实时通信需要低延迟(端到端<100ms)
– Opus低延迟模式:2.5-20ms算法延迟

延迟计算
– 总延迟 = 编码延迟 + 网络传输延迟 + 解码延迟 + 缓冲延迟
– 实时通信目标:总延迟&lt150ms(可接受)、&lt100ms(理想)


编码器实现详解

Opus编码器

Opus是现代化的开放音频编码标准,结合了SILK(语音编码)和CELT(音频编码)技术,提供从低码率语音到高质量音乐的全场景支持。

软件编码器

1. libopus(官方参考实现)
类型:开源软件编码器
开发者:Xiph.Org Foundation、Mozilla、Skype
特点
– Opus编码器的标准参考实现
– 支持所有Opus特性和模式
– 编码质量优秀,压缩效率高
– 跨平台支持(Windows、macOS、Linux、iOS、Android)
– 低延迟模式支持(2.5ms算法延迟)
– 码率范围:6kbps-510kbps
– 采样率支持:8kHz、12kHz、16kHz、24kHz、48kHz
优势
– 开源免费,无专利费用
– 质量优于同码率的AAC和MP3
– 低延迟特性优秀,适合实时通信
– WebRTC原生支持
– 自适应码率和带宽
劣势
– CPU占用相对较高(特别是高复杂度模式)
– 部分旧设备和平台兼容性有限
适用场景
– WebRTC音视频通话(最佳选择)
– VoIP语音通话
– 实时音乐流媒体
– 在线教育、远程会议
– 游戏语音

2. opus-tools
类型:官方命令行工具集
包含工具
opusenc:Opus编码器
opusdec:Opus解码器
opusinfo:Opus文件信息查看
特点:简单易用,适合批量转码

编码参数推荐

场景 Application 码率 采样率 帧长度 复杂度
语音通话 voip 16-32kbps 16kHz 20ms 5-8
视频会议 voip 32-64kbps 24kHz 20ms 8
音乐流媒体 audio 96-128kbps 48kHz 20ms 10
超低延迟 lowdelay 32-64kbps 16-24kHz 10ms 5
游戏语音 voip 24-48kbps 16kHz 20ms 5-8

硬件编码器支持情况

pus是相对较新的编码标准(2012年标准化),硬件芯片支持非常有限,绝大多数平台和设备不提供Opus硬件编解码


AAC编码器

AAC(Advanced Audio Coding)是广泛使用的音频编码标准,兼容性好,质量优秀。

软件编码器

1. fdk-aac(Fraunhofer AAC编码器)
类型:开源软件编码器(基于Fraunhofer商业编码器)
开发者:Fraunhofer IIS
特点
– AAC编码器的黄金标准,质量最好
– 支持所有AAC Profile(LC、HE、HEv2)
– 编码质量优于其他AAC软件编码器
– 跨平台支持
优势
– 质量最优,压缩效率高
– 低码率下质量优秀(HE-AAC)
– 广泛兼容性
劣势
– 编码速度相对较慢
– 某些专利限制(具体取决于地区)
适用场景
– 高质量音乐编码
– 流媒体服务(Spotify、Apple Music等)
– 视频音轨
– 广播

2. libavcodec AAC编码器
类型:FFmpeg/libavcodec内置
特点:质量一般,速度快,无专利费用
适用场景:快速转码、不要求极高质量的场景

硬件编码器支持情况

各平台AAC硬编硬解支持

平台/API AAC硬编支持 AAC硬解支持 Profile支持 开发者API FFmpeg编码器 备注
iOS (AudioToolbox) ✅ 支持 ✅ 支持 AAC-LC、HE-AAC、HE-AACv2 ✅ 开放&ltbr />AudioToolbox框架&ltbr />(iOS 4.0+) aac_at Apple官方API&ltbr />低CPU占用,高质量编码&ltbr />Swift/Objective-C/C可用
macOS (AudioToolbox) ✅ 支持 ✅ 支持 AAC-LC、HE-AAC、HE-AACv2 ✅ 开放&ltbr />AudioToolbox框架&ltbr />(macOS 10.6+) aac_at Apple官方API&ltbr />C/C++/Swift/Objective-C可用
Android (MediaCodec) ✅ 支持 ✅ 支持 AAC-LC、HE-AAC&ltbr />(具体支持因设备而异) ✅ 开放&ltbr />MediaCodec API&ltbr />(Android 4.1+, API 16+) aac_mediacodec Google官方API,Java/Kotlin可用&ltbr />需运行时检测硬件能力&ltbr />不同设备支持情况差异较大
Windows (Media Foundation) ✅ 支持 ✅ 支持 AAC-LC、HE-AAC ✅ 开放&ltbr />Media Foundation API&ltbr />(Windows 7+) aac_mf Microsoft官方API,C++/C#可用&ltbr />需要支持AAC的音频硬件/驱动
Linux (ALSA/PulseAudio) ⚠️ 部分支持 ⚠️ 部分支持 取决于硬件 ⚠️ 部分开放&ltbr />取决于硬件和驱动 支持情况因硬件和驱动而异&ltbr />通常使用软件编码

AAC编码器选择建议

iOS/macOS应用
推荐:使用AudioToolbox硬件编码
– 质量好,CPU占用低,功耗低
– 原生支持,无需第三方库
– 适合移动设备和实时场景

Android应用
推荐:使用MediaCodec硬件编码(需检测硬件支持)
– 备选:使用fdk-aac软件编码(通过NDK)
– 注意设备兼容性测试

高质量音乐编码
推荐:使用fdk-aac软件编码
– 码率:192-256kbps(AAC-LC)
– 质量最优

流媒体/直播
移动端:使用硬件编码(iOS AudioToolbox、Android MediaCodec)
桌面端:使用fdk-aac或硬件编码
– 码率:128kbps(标准)、192kbps(高质量)

留下评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注

Index