博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
AAC--概述
阅读量:3920 次
发布时间:2019-05-23

本文共 6179 字,大约阅读时间需要 20 分钟。

传统的MPEG-2 AAC	//Advanced Audio Coding 高级音频编码//MPEG-4标准出台,AAC重新集成了其它 技术(PS,SBR)MPEG-4 AAC(含有SBR或PS特性)AAC是新一代的音频有损压缩技术,它通过一些附加的编码技术(比如PS,SBR等),衍生出了LC-AAC,HE-AAC,HE-AACv2三 种主要的编码,1、LC-AAC就是比较传统的AAC,主要用于中高码率(>=80Kbps),2、HE-AAC(相当于AAC+SBR)主要用 于中低码(<=80Kbps),3、新近推出的HE-AACv2(相当于AAC+SBR+PS)主要用于低码率(<=48Kbps)//事实上大部分编码器设成<=48Kbps自动启用PS技术,//而>48Kbps就不加PS,就相当于普通的HE-AAC。AAC共有9种规格,以适应不同的场合的需要:MPEG-2 AAC LC 低复杂度规格(Low Complexity)--比较简单,没有增益控制,但提高了编码效率//AAC with Low Complexity AAC的低复杂度配置MPEG-2 AAC Main 主规格MPEG-2 AAC SSR 可变采样率规格(Scaleable Sample Rate)MPEG-4 AAC LC低复杂度规格(Low Complexity)------现在的手机比较常见的MP4文件中的音频部份就包括了该规格音频文件MPEG-4 AAC Main 主规格 ------包含了除增益控制之外的全部功能,其音质最好MPEG-4 AAC SSR 可变采样率规格(Scaleable Sample Rate)MPEG-4 AAC LTP 长时期预测规格(Long Term Predicition)MPEG-4 AAC LD 低延迟规格(Low Delay)MPEG-4 AAC HE 高效率规格(High Efficiency)-----这种规格适合用于低码率编码,有Nero ACC 编码器支持	//也叫HE-AAC, AAC+,MPEG4 AAC LC加入SBR模块后形成的一个AAC版本目前使用最多的是LC和HE(适合低码率)。流行的Nero AAC编码程序只支持LC,HE,HEv2这三种规格,编码后的AAC音频,规格显示都是LC。HE其实就是AAC(LC)+SBR技术,HEv2就是AAC(LC)+SBR+PS技术;

使用ffmpeg -formats命令,获取ffmpeg支持的音视频格式,其中我们可以找到支持的PCM格式

DE alaw            PCM A-law DE f32be           PCM 32-bit floating-point big-endian DE f32le           PCM 32-bit floating-point little-endian DE f64be           PCM 64-bit floating-point big-endian DE f64le           PCM 64-bit floating-point little-endian DE mulaw           PCM mu-law DE s16be           PCM signed 16-bit big-endian DE s16le           PCM signed 16-bit little-endian DE s24be           PCM signed 24-bit big-endian DE s24le           PCM signed 24-bit little-endian DE s32be           PCM signed 32-bit big-endian DE s32le           PCM signed 32-bit little-endian DE s8              PCM signed 8-bit DE u16be           PCM unsigned 16-bit big-endian DE u16le           PCM unsigned 16-bit little-endian DE u24be           PCM unsigned 24-bit big-endian DE u24le           PCM unsigned 24-bit little-endian DE u32be           PCM unsigned 32-bit big-endian DE u32le           PCM unsigned 32-bit little-endian DE u8              PCM unsigned 8-bit

s是有符号,u是无符号,f是浮点数。

be是大端,le是小端。

FFmpeg内部存储音频使用的采样格式:

enum AVSampleFormat {
AV_SAMPLE_FMT_NONE = -1, AV_SAMPLE_FMT_U8, ///< unsigned 8 bits AV_SAMPLE_FMT_S16, ///< signed 16 bits AV_SAMPLE_FMT_S32, ///< signed 32 bits AV_SAMPLE_FMT_FLT, ///< float AV_SAMPLE_FMT_DBL, ///< double AV_SAMPLE_FMT_U8P, ///< unsigned 8 bits, planar AV_SAMPLE_FMT_S16P, ///< signed 16 bits, planar AV_SAMPLE_FMT_S32P, ///< signed 32 bits, planar AV_SAMPLE_FMT_FLTP, ///< float, planar AV_SAMPLE_FMT_DBLP, ///< double, planar AV_SAMPLE_FMT_S64, ///< signed 64 bits AV_SAMPLE_FMT_S64P, ///< signed 64 bits, planar AV_SAMPLE_FMT_NB ///< Number of sample formats. DO NOT USE if linking dynamically};

1、Planar模式是ffmpeg内部存储模式,我们实际使用的音频文件都是Packed模式的。

2、FFmpeg解码不同格式的音频输出的音频采样格式不是一样。测试发现,其中AAC解码输出的数据为浮点型的 AV_SAMPLE_FMT_FLTP 格式,MP3解码输出的数据为 AV_SAMPLE_FMT_S16P 格式(使用的mp3文件为16位深)。具体采样格式可以查看解码后的AVFrame中的format成员或解码器的AVCodecContext中的sample_fmt成员。
3、Planar或者Packed模式直接影响到保存文件时写文件的操作,操作数据的时候一定要先检测音频采样格式。

存储方式:Packed和Planar的PCM数据区别Packed: L R L R L R L R	  	//两个声道分开存储			frame.data[0]或frame.extended_data[0]包含所有的音频数据中。Planar: L L L L R R R R   	//两个声道分开存储			frame.data[i]或者frame.extended_data[i]表示第i个声道的数据(声道0是第一个), 			//AVFrame.data数组大小固定为8,如果声道数超过8,需要从frame.extended_data获取声道数据。
描述PCM数据的6个参数:Sample Rate : 采样频率。8kHz(电话)、44.1kHz(CD)、48kHz(DVD)。Sample Size : 量化位数。通常该值为16-bit。Number of Channels : 通道个数。常见的音频有立体声(stereo)和单声道(mono)两种类型,立体声包含左声道和右声道。另外还有环绕立体声等其它不太常用的类型。Sign : 表示样本数据是否是有符号位,比如用一字节表示的样本数据,有符号的话表示范围为-128 ~ 127,无符号是0 ~ 255。Byte Ordering : 字节序。字节序是little-endian还是big-endian。通常均为little-endian。字节序说明见第4节。Integer Or Floating Point : 整形或浮点型。大多数格式的PCM样本数据使用整形表示,而在一些对精度要求高的应用方面,使用浮点类型表示PCM样本数据。

在这里插入图片描述

HE:“High Efficiency”(高效性)。HE-AAC v1(又称AACPlusV1,SBR),用容器的方法实现了AAC(LC)+SBR技术。SBR其实代表的是Spectral Band Replication(频段复制)。简要叙述一下,音乐的主要频谱集中在低频段,高频段幅度很小,但很重要,决定了音质。如果对整个频段编码,若是为了保护高频就会造成低频段编码过细以致文件巨大;若是保存了低频的主要成分而失去高频成分就会丧失音质。SBR把频谱切割开来,低频单独编码保存主要成分,高频单独放大编码保存音质,“统筹兼顾”了,在减少文件大小的情况下还保存了音质,完美的化解这一矛盾。

HEv2:用容器的方法包含了HE-AAC v1和PS技术。PS指“parametric stereo”(参数立体声)。原来的立体声文件文件大小是一个声道的两倍。但是两个声道的声音存在某种相似性,根据香农信息熵编码定理,相关性应该被去掉才能减小文件大小。所以PS技术存储了一个声道的全部信息,然后,花很少的字节用参数描述另一个声道和它不同的地方。

三、AAC特点(1)  AAC是一种高压缩比的音频压缩算法,但它的压缩比要远超过较老的音频压缩算法, 如AC-3、MP3等。并且其质量可以同未压缩的CD音质相媲美。(2)  同其他类似的音频编码算法一样,AAC也是采用了变换编码算法,但AAC使用了分辨率 更高的滤波器组,因此它可以达到更高的压缩比。(3)  AAC使用了临时噪声重整、后向自适应线性预测、联合立体声技术和量化哈夫曼编码等最新技术,这些新技术的使用都使压缩比得到进一步的提高。(4)  AAC支持更多种采样率和比特率、支持1个到48个音轨、支持多达15个低频音轨、具有多种语言的兼容能力、还有多达15个内嵌数据流。(5)AAC支持更宽的声音频率范围,最高可达到96kHz,最低可达8KHz,远宽于MP3的16KHz-48kHz的范围。(6)不同于MP3及WMA,AAC几乎不损失声音频率中的甚高、甚低频率成分,并且比WMA在频谱结构上更接近于原始音频,因而声音的保真度更好。专业评测中表明,AAC比WMA声音更清晰,而且更接近原音。(7)AAC采用优化的算法达到了更高的解码效率,解码时只需较少的处理能力。

AAC的音频文件格式有以下两种:

ADIF:Audio Data Interchange Format 音频数据交换格式。这种格式的特征是可以确定的找到这个音频数据的开始,不需进行在音频数据流中间开始的解码,即它的解码必须在明确定义的开始处进行。故这种格式常用在磁盘文件中。//ADIF只有一个统一的头,所以必须得到所有的数据后解码ADTS:Audio Data Transport Stream 音频数据传输流。这种格式的特征是它是一个有同步字的比特流,解码可以在这个流中任何位置开始。它的特征类似于mp3数据流格式。这种格式可以用于广播电视。

简言之。ADIF只有一个文件头,ADTS每个包前面有一个文件头。

ADIF

在这里插入图片描述

AAC的ADIF格式见下图:
AAC的ADIF格式见下图:

ADTS

固定头:

在这里插入图片描述
可变头信息:
在这里插入图片描述

AAC的ADTS的一般格式见下图:

在这里插入图片描述
其中syncword作为分隔符 0xFFF(二进制“111111111111”)
…syncword + ADTS frame + syncword + ADTS frame…

AAC码流解析的步骤就是首先从码流中搜索0x0FFF,分离出ADTS frame;然后再分析ADTS frame的首部各个字段。

3.AAC元素信息

在AAC中,原始数据块的组成可能有六种不同的元素:SCE: Single Channel Element单通道元素。单通道元素基本上只由一个ICS组成。一个原始数据块最可能由16个SCE组成。CPE: Channel Pair Element 双通道元素,由两个可能共享边信息的ICS和一些联合立体声编码信息组成。一个原始数据块最多可能由16个SCE组成。CCE: Coupling Channel Element 藕合通道元素。代表一个块的多通道联合立体声信息或者多语种程序的对话信息。LFE: Low Frequency Element 低频元素。包含了一个加强低采样频率的通道。DSE: Data Stream Element 数据流元素,包含了一些并不属于音频的附加信息。PCE: Program Config Element 程序配置元素。包含了声道的配置信息。它可能出现在ADIF 头部信息中。FIL: Fill Element 填充元素。包含了一些扩展信息。如SBR,动态范围控制信息等。

4.AAC文件处理流程

(1) 判断文件格式,确定为ADIF或ADTS(2) 若为ADIF,解ADIF头信息,跳至第6步。(3) 若为ADTS,寻找同步头。(4)   解ADTS帧头信息。(5)   若有错误检测,进行错误检测。(6)   解块信息。(7)   解元素信息。

AAC解码流程

在这里插入图片描述

在主控模块开始运行后,主控模块将AAC比特流的一部分放入输入缓冲区,通过查找同步字 得到一帧的起始,找到后,根据ISO/IEC 13818-7所述的语法开始进行Noisless Decoding(无噪解码),无噪解码实际上就是哈夫曼解码,通过反量化(Dequantize)、联合立体声(Joint Stereo),知觉噪声替换(PNS),瞬时噪声整形(TNS),反离散余弦变换(IMDCT),频段复制(SBR)这几个模块之后,得出左右声道的 PCM码流,再由主控模块将其放入输出缓冲区输出到声音播放设备。

转载地址:http://kbhrn.baihongyu.com/

你可能感兴趣的文章
eth0未启动或找不到设备
查看>>
rmmod命令
查看>>
centos7安装PHP5.5
查看>>
cenos7排错之yum依赖错误处理:清理重复的rpm包
查看>>
php卸载
查看>>
服务器多块网卡绑定后,bond没有起来
查看>>
Nginx安装的前期准备工作
查看>>
nginx 编译参数详解
查看>>
安装nginx
查看>>
Linux之history指令
查看>>
行首行尾字符^$
查看>>
Linux中的. 和*字符
查看>>
linux sed命令详解
查看>>
Shell脚本基本信息
查看>>
xz压缩命令
查看>>
source、sh、bash、./执行脚本的区别
查看>>
centos7安装Apache虚拟主机
查看>>
Job for network.service failed
查看>>
在同一个网络接口上绑定多个IP
查看>>
TreeMap源码分析(基于jdk1.8)
查看>>