课程名称:音视频基础+ffmpeg原理 入门音视频技术开发
课程章节:音频编码原理
课程讲师:李超
课程内容
1.AAC的ADTS格式
AAC的音频文件格式有ADIF和ADTS两种。
- ADIF:Audio Data Interchange Format,音频数据交换格式。这种格式的特征是可以确定的找到这个音频数据的开始,不需进行在音频数据流中间开始的解码,即它的解码必须在明确定义的开始处进行。故这种格式常用在磁盘文件中。
- ADTS:Audio Data Transport Stream。是AAC音频的传输流格式。这种格式的特征是它是一个有同步字的比特流,解码可以在这个流中任何位置开始。
总结:ADTS可以在任意帧解码,也就是说它每一帧都有头信息。ADIF只有一个统一的头,所以必须得到所有的数据后解码。且这两种的header的格式也是不同的,目前一般编码后的和抽取出的都是ADTS格式的音频流。
ADTS由7个字节或9个字节组成,ADTS头包含了AAC文件的采样率、通道数、帧数据长度等信息。ADTS头分为固定头信息和可变头信息两个部分,固定头信息在每个帧中的是一样的,可变头信息在各个帧中并不是固定值。ADTS头一般是7个字节((28+28)/ 8)长度,如果需要对数据进行CRC校验,则会有2个Byte的校验码,所以ADTS头的实际长度是7个字节或9个字节。
AAC ADTS格式的参考网址:https://www.p23.nl/projects/aac-header
2.通过ffmpeg生成AAC数据
音频编码器有 libfaac、libfdk_aac、Nero AAC,ffmpeg内置aac,libfdk_aac 音频编码质量最优。通过 ffmpeg 生成 AAC 数据的命令:
ffmpeg -i 01.mp4 -vn -c:a libfdk_aac -ar 44100 -channels 2 -profile:a aac_he_v2 3.aac
其中:
- -i xxx.mp4 代表输入的多媒体文件,文件中一定要带音频;
- -vn:即video no简写,表示过滤视频;
- -c:a:即codec:audio简写,指定音频编解码器为libfdk_aac;
- -ar:代表音频采样率;
- -channels:代表通道数,2表示双声道(左声道和右声道)
- -profile:a:表示对音频参数(aac_he_v2)进行设置
- 3.aac:表示最终输出aac文件的名字
ffmpeg 生成aac文件参数查询网址: http://ffmpeg.org/ffmpeg-codecs.html#libfdk_005faac