前言:
目前大家对“香农编码效率何时能达到100以上”大致比较珍视,我们都想要学习一些“香农编码效率何时能达到100以上”的相关文章。那么小编也在网摘上搜集了一些对于“香农编码效率何时能达到100以上””的相关内容,希望朋友们能喜欢,各位老铁们快快来了解一下吧!本文目录:
一、AAC编码概述二、AAC编码规格简述三、AAC编码的特点四、AAC音频文件格式一、AAC编码概述
AAC是高级音频编码(Advanced Audio Coding)的缩写,出现于1997年,最初是基于MPEG-2的音频编码技术,目的是取代MP3格式。2000年,MPEG-4标准出台,AAC重新集成了其它技术包括SBR或PS特性,目前AAC可以定义为⼀种由 MPEG-4 标准定义的有损音频压缩格式
二、AAC编码规格简述
AAC共有9种规格,以适应不同的场合的需要:
MPEG-2 AAC LC 低复杂度规格(Low Complexity) 注:比较简单,没有增益控制,但提高了编码效率,在中等码率的编码效率以及音质方面,都能找到平衡点
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 编码器支持
流行的Nero AAC编码程序只支持LC,HE,HEv2这三种规格,编码后的AAC音频,规格显示都是LC。HE其实就是AAC(LC)+ SBR技术,HEv2就是AAC(LC)+ SBR + PS技术;
这里再说明一下HE和HEv2的相关内容:
HE: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在频谱结构上更接近于原始音频,因而声音的保真度更好。
(7). AAC采用优化的算法达到了更高的解码效率,解码时只需较少的处理能力。
四、AAC音频文件格式1. ACC 音频文件格式类型
AAC的音频文件格式有ADIF & ADTS:
ADIF:Audio Data Interchange Format 音频数据交换格式。这种格式的特征是可以确定的找到这个音频数据的开始,不需进行在音频数据流中间开始的解码,即它的解码必须在明确定义的开始处进行,这种格式常用在磁盘文件中。
ADTS:Audio Data Transport Stream 音频数据传输流。这种格式的特征是它是一个有同步字的比特流,解码可以在这个流中任何位置开始。它的特征类似于mp3数据流格式。
简单说,ADTS可以在任意帧解码,也就是说它每一帧都有头信息。ADIF只有一个统一的头,所以必须得到所有的数据后解码。这两种的header的格式也是不同的,一般编码后的和抽取出的都是ADTS格式的音频流。
音视频开发学习资料→「链接」
AAC的ADIF文件格式如下:
header()
raw_data_stream()
AAC的ADTS文件中一帧的格式如下:
...
syncword
header()
error_check()
raw_data_block()
...
ADTS格式中两边的空白矩形表示当前一帧前后的数据。
2. ADIF 的 Header 结构
ADIF 的头信息如下图:
ADIF头信息位于AAC文件的起始处,接下来就是连续的 Raw Data Blocks。
3. ADTS 的 Header 头结构
一个 AAC 原始数据块长度是可变的,对原始帧加上 ADTS 头的封装,就形成了 ADTS 帧。ADTS 头中相对重要的信息有:采样率,声道数,帧长度 ,每一个带 ADTS 头信息的 AAC 流会清晰的告诉解码器它需要的这些信息,解码器才能解析读取。一般情况下 ADTS 的头信息都是 7 个字节,分为 2 部分:
- adts_fixed_header(); —— 固定头信息,头信息中的每一帧都相同.
- adts_variable_header(); —— 可变头信息,头信息则在帧与帧之间可变.
ADTS 的固定头信息:
Syncword: 总是0xFFF,代表一个ADTS帧的开始, 用于同步,解码器可通过0xFFF确定每个ADTS的开始位置.因为它的存在,解码可以在这个流中任何位置开始, 即可以在任意帧解码**。
ID:MPEG Version: 0 for MPEG-4, 1 for MPEG-2
Layer:always: '00'
Protection_absent:Warning, set to 1 if there is no CRC and 0 if there is CRC
Profile:表示使用哪个级别的AAC,如profile的值等于 Audio Object Type的值减1,即profile = MPEG-4 Audio Object Type - 1
sampling_frequency_index: 采样率的下标
channel_configuration:声道数. 比如2表示立体声双声道.
aac_frame_length: 一个ADTS帧的长度包括ADTS头和AAC原始流.
adts_buffer_fullness:0x7FF 说明是码率可变的码流.
number_of_raw_data_blocks_in_frame:表示ADTS帧中有number_of_raw_data_blocks_in_frame + 1个AAC原始帧.
在实际开发AAC编解码的时候,尤其是封装ADTS帧的时候,如何设置相关的Header的值,可以参考如下wiki内容:
注意:ACC LC和HE在采样率设置方面不同,LC格式的为正常索引,HE格式的索引为除2后对应的采样索引,这是因为:HE使用了SBR技术,即 Spectral Band Replication(频段复制),所以存储同样的音频内容,HE文件较小。使用时采样率为LC的一半。
ADTS的可变头信息:
(1)Syncword 存在的目的是为了找出帧头在比特流中的位置,ADTS格式的帧头同步字为12比特的“1111 1111 1111”.
(2)ADTS的头信息为两部分组成,其一为固定头信息,紧接着是可变头信息。固定头信息中的数据每一帧都相同,而可变头信息则在帧与帧之间可变。
4. AAC文件处理流程
(1). 判断文件格式,确定为ADIF或ADTS
(2). 若为ADIF,解ADIF头信息,跳至第6步。
(3). 若为ADTS,寻找同步头。
(4). 解ADTS帧头信息。
(5). 若有错误检测,进行错误检测。
(6). 解块信息。
(7). 解元素信息。
注意:有时候在处理AAC音频流的时候 (比如:把 AAC 音频的 ES 流从 FLV 封装格式中抽出来送给硬件解码器),编码后的 AAC 文件在PC或者手机上不能播放,导致播放错误,很大可能的原因是 AAC 文件的每一帧缺少 ADTS 头信息文件的包装拼接,这时需要加上头文件 ADTS 即可。
标签: #香农编码效率何时能达到100以上