常见的音频编码器
常见的音频编码器包括OPUS(速度快,压缩率大),AAC(最为广泛的),Ogg,Speex,iLBC,AMR,G.711其中,ACC在直播系统中应用的比较广泛,OPUS是较新的音频编解码,WebRTC模式使用OPUS,固话一般使用G.711(损耗很大)系列。评测结果:OPUS>AAC>Ogg。
音频编码质量比较
音频编码率比较
ACC
AAC(Advanced Audio Coding)由许多知名公司开发,其目的是取代MP3格式,其最开始是基于MPEG-2的音频编码技术,MPEG-4标准出现以后,AAC重新集成了其特性,加入了SBR和PS技术。常见的规格有AAC LC、AAC HE V1和AAC HE V2。
- AAC LC : (Low Complexity)低复杂度规格,码流是128k ,音质好。
- AACHE :等于AAC LC + SBR (Spectral Band Replication)。其核心思相是按频谱分保存。低频编码保存主要成分,高频单独放大编码保存音质。码流在64k左右。
- AAC HE V2 :等于AACLC + SBR + PS(Parametric Stereo)。其核心思相是双声道中的声音存在某种相似性,只需存储一个声道的全部信息,然后,花很少的字节用参数描述另一个声道和它不同的地方。
AAC格式
- ADIF ( Audio Data Interchange Format ),这种格式的特征是可以确定的找到这个音频数据的开始,只能从头开始解码,不能在音频数据流中间开始。这种格式常用在磁盘文件中。
- ADTS ( Audio Data Transport Stream ),这种格式的特征是每一帧都有一个同步字,所以可以在音频流的任何位置开始解码。它类似于数据流格式。
ADTS的结构
ADTS由7/9个字节组成
12 | syncword OxFFF, all bits must be 1 |
1 | MPEG Version; 0 for MPEG- -4, 1 for MPEG -2 |
2 | Layer: always 0 |
1 | protection absent, Warning, set to 1 if there is no CRC and 0 if there is CRC |
2 | profle, the MPEG- -4 Audio Object Type minus 1 |
4 | MPEG-4 Sampling Frequency Index (15 is forbidden) |
1 | private bit, guaranteed never to be used by MPEG, set to 0 when encoding, ignore when decoding |
3 | MPEG- .4 Channel Configuration (in the case of 0, the channel configuration is sent via an inband PCE) |
1 | originality, set to O when encoding, ignore when decoding |
1 | home, set to 0 when encoding, ignore when decoding |
1 | copyrighted id bit, the next bit of a centrally registered copyright identifier, set to 0 when encoding, ignore when decoding |
1 | copyright id start, signals that this frame's copyright id bit is the first bit of the copyright id, set to 0 when encoding, ignore when decoding |
13 | frame length, this value must include 7 or 9 bytes of header length: FrameLength = (ProtectionAbsent == 1? 7: 9) + size(AACFrame) |
11 | Buffer fullness |
2 | Number of AAC frames (RDBs) in ADTS frame minus 1, for maximum compatibility always use 1 AAC frame per ADTS frame |
16 | CRC if protection absent is 0 |
Audio Object Types
- 1: AAC Main
- 2:AACLC
- 5: SBR
- 29: PS
Sampling Frequency Index
- 0: 96000 Hz
- 1: 88200 Hz .
- 2: 64000 Hz
- 3: 48000 Hz
- 4: 44100 Hz
- 5: 32000 Hz
- 6: 24000 Hz
- 7: 22050 Hz
- 8: 16000 Hz
- 9: 12000Hz
- 10: 11025 Hz
- 11: 8000 Hz
- 12: 7350 Hz
- 13: Reserved
- 14: Reserved
- 15: frequency is written explictly
使用在线网站查看AAC Header
FF F1 51 80 2E 7F FC 21
Bits | 1111111111110001010111001000000000101110011111111111110000100001 |
---|---|
ID | MPEG-4 |
MPEG Layer | 0 |
CRC checksum absent | 1 |
Profile | Low Complexity profile (AAC LC) |
Sampling frequency | 22050 |
Private bit | 0 |
Channel configuration | 2 |
Original/copy | 0 |
Home | 0 |
Copyright identification bit | 0 |
Copyright identification start | 0 |
AAC frame length | 371 |
ADTS buffer fullness | VBR |
No raw data blocks in frame | 0 |
FFmpeg生成AAC文件
ffmpeg -i input.mp4 -vn -c:a libdfk_aac -ar 44100 -channels 2 -profile:a aac_he_v2 target.aac
- -i 代表输入的文件
- -vn代编 video not,不生成视频
- -c:a代表codec:a,音频解码器为libdfk_aac
- -ar 代表audio rate为44100
- -channels为通道数
- -profile:a 配置audio为aac_he_v2,
音频重采样
将音频三元组(采样率、采样大小和通道数)的值转换成另外一组值。其中任何一个值发生了变换都称为重采样,例如将44100/16/2 ---> 48000/16/2。
为什么需要重采样
- 从设备采集的音频数据与编码器要求的数据不一致
- 扬声器要求的音频数据与要播放的音频数据不一致
- 更方便运算(在回音消除时,将多声道转化为单声道)
ffmpeg重采样的步骤
- 创建重采样上下文
- 设置参数
- 初始化重采样
- 进行重采样
api:
- swr_ alloc_ set_ opts
- swr_init
- swr_convert
- swr_free