1 文件格式

1.1 概述及分类

AAC“Advanced Audio Coding”的缩写,中文称为“高级音频编码”,被手机界称为“21世纪数据压缩方式”,AAC所采用的运算方式是与MP3的运算有所不同,AAC同时可以支持多达48个音轨,15个低频音轨,更多种取样率和比特率与及有多种言语的兼容能力,更高的译码效率,总括来说,AAC可以在对比MP3文件缩小30%的前题下提供更好的音质。

AAC帧与帧之间编码完全独立,所以其广泛运用于流媒体。

由于对AAC有重要贡献的公司比较多,如Fraunhofer,Dolby, Sony和AT&T,导致AAC子格式多,很容易搞混。他们是共分为9种规格,以适应不同场合的需要:

a) MPEG-2 AAC LC 低复杂度规格 (Low Complexity)

b) MPEG-2 AAC Main 主规格

c) MPEG-2 AAC SSR 可变取样率规格 (Scaleable Sample Rate)

d) MPEG-4 AAC LC 低复杂度规格(Low Complexity),现在的手机比较常见的MP4文件中的音频部份就包括了该规格音频文件

e) MPEG-4 AAC Main 主规格

f) MPEG-4 AAC SSR 可变取样率规格 (Scaleable Sample Rate)

g) MPEG-4 AAC LTP 长时期预测规格(Long Term Predicition)

h) MPEG-4 AAC LD 低延迟规格(Low Delay)

i) MPEG-4 AAC HE 高效率规格(High Efficiency)(即AAC+,含SBR)

上述的规格中,主规格“Main”包含了除增益控制之外的全部功能,其音质是最好,而低复杂度规格则是比较简单,没有了增益控制,但提高了编码效率,至“SSR”对“LC”规格大体是相同,但是多了增益的控制功能,另外,MPEG-  4/AAC/LTP/LD/HE,都是用在低码率下编码,特别是“HE”是有Nero ACC编码器支持,是近来多用的一种编码率种,不过通常来说,Main规格和LC规格的音质相差是不大。

以上规格的划分是比较官方的分发,wiki上也是如此划分。事实上MPEG-4与MPEG-2 AAC流除了在文件头(header)上并没有什么区别。只是一些应用软件象QuickTime并不承认MPEG-2 AAC。Real的解码程序中,并未对这2种进行区分。所以从编解码来看,按如下划分更清晰:

a)LC profile:最简单的profile,苹果iTune使用这种格式(iTune也使用Apple LosslessAAC ,不过似乎没有划分到AAC家族中,一个文件通常上20M)。

b) MAIN profile: LC profile + 后向预测(backwards prediction)

c) SRS: sample-rate scalability,submitted by Sony and reportedly

d) LTP:long term prediction, main profile + forward prediction

e)HE-AAC: high efficiency AAC,又叫aacPlus,使用SBR,可能使用PS.AAC + SBR(Spectral Band Replication)aacPlusv1, AAC + SBR + PS(Parametric Stereo)aacPlus v2.  如图所示:

其中,aacPlus v1已被运动图像专家组MPEG指定为其标准MPEG-4 HE AAC.

1.2 AAC的编码器

a) FhG Fraunhofer IIS研发的权威编码器,拥有很好的音质,不对外开放。

b) Nero AAC可能是目前最完美的AAC编码器了,同时支持"LC AAC/HE AAC"规格,Nero AAC编码器提供了品质最好的"VBR LC AAC"格式,同时亦对面"HE AAC"规格保证了在低码率下也有良好的表现,千千静听 + Nero插件,就可以编码AAC文件了,我当初就这么做测试向量的,哈哈。

c) QuickTime/iTune Apple公司的两款Media软件都提供了AAC编码功能,其编码技术来自“DolbyLaboratories”,是目前音质最好的中码编率编码器,它编码的48kbps立体声音质比其它AAC编码器好20 - 25%,甚至64 kbps的Dolby AAC音效可媲美128 kbps的MP3。

d) FAAC:免费,开源,郑重推荐。

1.3 文件后缀名

用aac编码的文件可能使用这三种后缀名:aac,m4a,mp4.

AAC:以aac为后缀的文件无文件头,由一些列的帧组成文件,帧头分ADIF和ADTS两种。

M4A:用MP4作为container,这种MP4文件里面只有音频帧,无视频帧。由MP4文件头+一系列的帧组成,帧头比AAC为后缀的文件要短。所以在保持压缩数据不变的情况下,将AAC转为M4A,文件会小一些,因为每帧省几个字节,合起来省下的字节数通常比MP4文件头还大。

MP4:可以同时有视频帧和音频帧,也可以只有音频或视频帧。

注:在下面的1.5节中,会详细说一下AAC为后缀的文件格式,MP4 container的格式可以参照我的另一篇文章,MPEG4-Part14 -- MP4 file format。

1.4 编码工具推荐

FAAC 和 千千静听+nero插件

1.5 File format specification--以aac为后缀名的文件格式

AAC没有文件头,由帧序列组成。一共有2种格式的帧头,ADTS和ADIF。一个文件中通常不会2种帧共存,并且大多数AAC文件包含的帧为    ADTS。

ADIF:Audio Data Interchange Format 音频数据交换格式。这种格式的特征是可以确定的找到这个音频数据的开始,不需进行在音频数据流中间开始的解码,即它的解码必须在明确定义的开始处进行。故这种格式常用在磁盘文件中。

ADTS:Audio Data Transport Stream 音频数据传输流。这种格式的特征是它是一个有同步字的比特流,解码可以在这个流中任何位置开始。

//以下对文件格式说明使用的表格来自ISO-IEC-13818-7

1.5.1 ADIF

ADIF的帧序列按如下方式组成一个文件:

Table 2– Syntax of adif_sequence()

Syntax

No. of bits

Mnemonic

adif_sequence()

{

adif_header();

byte_alignment();

raw_data_stream();

}

其中Header结构如下:

Table 3 – Syntax of adif_header()

Syntax

No. of bits

Mnemonic

adif_header()

{

adif_id;

32

bslbf

copyright_id_present;

1

bslbf

if (copyright_id_present) {

copyright_id;

72

bslbf

}

original_copy;

1

bslbf

home;

1

bslbf

bitstream_type;

1

bslbf

bitrate;

23

uimsbf

num_program_config_elements;

4

bslbf

if (bitstream_type == ‘0’) {

adif_buffer_fullness;

20

uimsbf

}

for (i = 0; i < num_program_config_elements + 1; i++) {

program_config_element();

}

}

1.5.2 ADTS

ADTS文件有帧序列组成,如下表所示:

Table 4 – Syntax of adts_sequence()

Syntax

No. of bits

Mnemonic

adts_sequence()

{

while (nextbits() == syncword) {

adts_frame();

}

}

每帧除去最前面的同步字后,结构如下:

Table 5 – Syntax of adts_frame()

Syntax

No. of bits

Mnemonic

adts_frame()

{

adts_fixed_header();

adts_variable_header();

if (number_of_raw_data_blocks_in_frame == 0) {

adts_error_check();

raw_data_block();

}

else {

adts_header_error_check();

for (i = 0; i <= number_of_raw_data_blocks_in_frame; i++) {

raw_data_block();

adts_raw_data_block_error_check();

}

}

}

其中,ADTS头分两部分,固定头和可变头,固定头每帧一样,可变头帧与帧可以不同。

Table 8 – Syntax of adts_fixed_header()

Syntax

No. of bits

Mnemonic

adts_fixed_header()

{

syncword;

12

bslbf

ID;

1

bslbf

layer;

2

uimsbf

protection_absent;

1

bslbf

profile;

2

uimsbf

sampling_frequency_index;

4

uimsbf

private_bit;

1

bslbf

channel_configuration;

3

uimsbf

original/copy;

1

bslbf

home;

1

bslbf

}

Table 9 – Syntax of adts_variable_header()

Syntax

No. of bits

Mnemonic

adts_variable_header()

{

copyright_identification_bit;

1

bslbf

copyright_identification_start;

1

bslbf

frame_length;

13

bslbf

adts_buffer_fullness;

11

bslbf

number_of_raw_data_blocks_in_frame;

2

uimsfb

}

2 解码流程

to be continued....

data后缀文件解码_AAC文件格式与解码流程相关推荐

  1. data后缀文件解码_WMA文件格式和解码流程 | 学步园

    1 文件格式(ASF) ASF:Advanced Systems Format (formerly Advanced Streaming Format, Active Streaming Format ...

  2. data后缀文件解码_Java语法进阶13-文件、IO流

    File File是文件和目录路径名的抽象表示形式,即File类是文件或目录的路径,而不是文件本身,因此File类不能直接访问文件内容本身,如果需要访问文件内容本身,则需要使用输入/输出流. File ...

  3. data后缀文件解码_小白学PyTorch | 17 TFrec文件的创建与读取

    [机器学习炼丹术]的学习笔记分享<> 小白学PyTorch | 16 TF2读取图片的方法 小白学PyTorch | 15 TF2实现一个简单的服装分类任务 小白学PyTorch | 14 ...

  4. data后缀文件解码_封装ThinkPHP6.0通用文件上传

    php中文网最新课程 每日17点准时技术干货分享 本文为php中文网认证作者:"wpj"投稿,欢迎加入php中文网有偿投稿计划! 本文实例讲述了封装ThinkPHP6通用文件上传方 ...

  5. data后缀文件解码_data类型的Url格式

    所谓"data"类型的Url格式, 是在RFC2397中提出的,目的对于一些"小"的数据,可以在网页中直接嵌入,而不是从外部文件载入.例如对于img这个Tag, ...

  6. python3 转码的函数_python基础3之文件操作、字符编码解码、函数介绍

    内容概要: 一.文件操作 二.字符编码解码 三.函数介绍 一.文件操作 文件操作流程: 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 基本操作: 1 #/usr/bin/e ...

  7. python文件操作解码_python基础3之文件操作、字符编码解码、函数介绍

    内容概要: 一.文件操作 二.字符编码解码 三.函数介绍 一.文件操作 文件操作流程: 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 基本操作: 1 #/usr/bin/e ...

  8. python基础3之文件操作、字符编码解码、函数介绍

    内容概要: 一.文件操作 二.字符编码解码 三.函数介绍 一.文件操作 文件操作流程: 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 基本操作: 1 #/usr/bin/e ...

  9. php 后缀文件怎么打开,php是什么文件格式,php扩展名文件如何打开?

    php是什么文件? 对于php是什么文件?您还可能还有类似的疑问,比如: 为什么不支持php文件格式? 怎么打开php文件格式? 哪些软件可以打开php文件格式? 如何支持php文件格式?等等类似问题 ...

最新文章

  1. MyBatis+Mysql实现从记录表中统计符合条件的人数
  2. spring 与 guice 的区别好玩的好法(转)
  3. ReactNative常用组件汇总
  4. 自动驾驶使用贝塞尔曲线进行动态障碍物避障测试
  5. Maven打包Package执行插件的顺序
  6. putty 登陆Linux 标签栏显示当前ip
  7. int CWnd::GetWindowTextW(LPTSTR,int) const”: 不能将参数 1 从“char [10]”转换为“LPTSTR”
  8. 准备在北京Tech·Ed上组织博客园聚会
  9. es6遍历树结构并判断_实现树形结构数据 es6
  10. Qt 实现控件抖动 动画窗口抖动 QQ抖动
  11. 下载安装php详细教程(在安装配置apache之后)
  12. 首次登陆系统强制修改密码
  13. php扒皮,扒皮b站美妆up主兰花
  14. html 手指状态,HTML5技术教程 手指按下和手指抬起触发事件
  15. Attentional Factorization Machine(AFM)复现笔记
  16. Win10 OpenGL安装及配置
  17. 如何将pdf转word?这几个软件可以做到文档格式转换
  18. 图形使用计算机绘制的画面,本章练习优质课教学设计
  19. 好像还挺好玩的GAN8——SRGAN实现图像的分辨率提升
  20. 开启产品经理之路-产品模型制作

热门文章

  1. mac安装win10_VMware虚拟机如何安装Win10系统
  2. 分布式中间件之Dubbo详解
  3. excel插入页码_95后小姐姐打印Excel表格前做了1个步骤,工资直接从3000涨到6000!...
  4. 类似qq,微信不受监控安全的聊天工具推荐
  5. 小狼毫 Rime 输入方案 设置
  6. excel单元格分割线消失的解决
  7. 加拿大fba海运专线运输稳定吗?
  8. 教育行业短信模板大全
  9. Mac os无法推出移动硬盘解决方案
  10. qlv用什么软件转成mp4