深入探索 AAC 编码原理与 ADTS 格式:音频世界的智慧结晶

在数字音频的广阔领域中,AAC 编码及其相关的 ADTS 格式扮演着至关重要的角色。无论是在我们日常使用的音乐 APP,还是高清视频中的音频部分,都能看到它们的身影。今天,就让我们深入探索 AAC 编码原理与 ADTS 格式的奥秘,揭开它们高效处理音频数据的神秘面纱。

一、走进 AAC 编码

(一)AAC 编码的诞生背景

随着数字音频技术的不断发展,人们对音频质量和文件大小的要求越来越高。传统的 MP3 编码在一定程度上已经无法满足这些需求,于是,AAC(Advanced Audio Coding,高级音频编码)应运而生。它是由 Fraunhofer IIS、杜比实验室、索尼等公司共同开发的一种音频编码标准,旨在提供更高质量的音频压缩,同时减小文件体积。可以说,AAC 编码就像是音频领域的新一代 "工匠",用更精湛的技艺打造出既节省空间又保证音质的音频作品。

(二)AAC 编码特点

1.感知编码技术 :AAC 编码的核心基于感知编码技术,这是一种模仿人类听觉系统特性的编码方式。人类听觉系统有一个有趣的特性 ------ 掩蔽效应。简单来说,当一个强音和一个弱音同时存在时,弱音可能会被强音 "掩盖",我们的耳朵就难以察觉到弱音的存在。AAC 编码巧妙地利用了这一特性,通过分析音频信号的频率、幅度等信息,将那些被掩蔽的音频成分去除,从而在不影响听觉体验的前提下,大大减小了音频数据量。这就好比在一幅复杂的画作中,巧妙地隐藏一些不影响整体视觉效果的细节,使画作既保持美观又占用更少的存储空间。

虚线为人耳能察觉的声压阈值,当环境中存在强音掩蔽音是,声压阈值随之提高(蓝色曲线),而低于这个掩蔽阈值而高于虚线的声音会被岩壁音掩盖。

2.多声道支持:在当今的音频应用中,多声道音频越来越普及,比如常见的 5.1 声道、7.1 声道等。AAC 编码对多声道音频提供了良好的支持。它能够有效地对多个声道的音频数据进行编码,在保证各个声道声音质量的同时,合理地压缩数据。以家庭影院系统为例,AAC 编码可以将不同声道的声音,如前方的主声道、后方的环绕声道等,精确地编码并传输,让我们在家中就能享受到身临其境的音频体验。

3.灵活的采样率和比特率:AAC 编码支持多种采样率和比特率设置。采样率决定了音频信号在单位时间内的采样点数,比特率则表示单位时间内传输的音频数据量。通过灵活调整这两个参数,AAC 可以适应不同的应用场景和网络环境。比如在网络带宽有限的情况下,可以选择较低的采样率和比特率,保证音频能够流畅传输;而在对音质要求较高的音乐制作场景中,则可以选择较高的采样率和比特率,以获得更出色的音质。这就像一个可以根据不同路况调整速度的智能汽车,总能找到最合适的行驶方式。

(三)AAC编码深度解析

此部分内容参考音视频编解码------音频编解码格式AAC(Advanced Audio Coding)

编码流程:

  1. **音频分帧:**AAC 编码的第一步,是将连续的音频信号进行巧妙 "切割",这就是音频分帧。想象一下,音频信号是一条源源不断流淌的声音长河,为了更好地处理它,我们需要把它切成一段段固定长度的 "小片段",这每一段就叫做一帧。通常情况下,每帧会包含几十毫秒的音频数据,这个长度是经过精心挑选的。如果帧太长,处理起来计算量太大;如果帧太短,又会丢失音频的连贯性。这就好比把一长卷电影胶片切成一段段合适长度的小胶片,每一段都能独立又完整地记录一小段精彩的画面。

  2. **窗函数应用:**分好帧后,每个音频帧都要 "戴上" 一个特殊的 "滤镜"------ 窗函数。音频信号在时域中是连续变化的,当进行频谱分析时,如果直接处理,会出现频谱泄漏的问题,就像光线透过不完美的窗户发生散射一样,导致分析结果不准确。窗函数就像是一个温柔的 "整形工具",它可以让音频帧的边缘变得平滑,减少频谱泄漏。不同类型的窗函数有着不同的 "整形效果",常见的有汉宁窗、汉明窗等,AAC 会根据具体的应用场景选择合适的窗函数,让音频帧以最好的状态进入下一个处理环节。

  3. **频谱分析:**经过窗函数 "温柔处理" 后的音频帧,接下来要开启一场神奇的 "频率之旅"------ 频谱分析。这一步通常借助快速傅里叶变换(FFT)来实现,FFT 就像是一把神奇的钥匙,能把时域的音频信号转换为频域表示。在时域中,我们看到的音频信号是随时间变化的波形,而在频域中,就像打开了一个神秘的频率宝藏箱,我们可以清楚地看到信号包含的不同频率成分及其强度。这就好比把一幅彩色画按照不同颜色的频率进行分解,每种颜色的频率就是音频信号中的一个频率成分,通过这种方式,AAC 能够更方便地分析和处理音频信号。

  4. **感知模型:**基于人耳的感知特性,AAC 编码引入了感知模型,这是整个编码过程中最具智慧的环节之一。人耳有着独特的掩蔽效应,AAC 编码利用这个特性,对频谱进行掩蔽效应处理。它会像一个聪明的管理者,精准地识别出那些被强音掩盖的弱音区域,然后减少对这些掩盖区域的编码量,这样在不影响我们听觉体验的前提下,大大减小了音频数据量,实现了高效的压缩。

  5. **量化和编码:**经过感知模型处理后,接下来要对频谱进行量化和编码。根据频谱中系数幅度的大小,合理地分配表示它们所需的比特数。对于那些幅度较小的系数,就像一些不太重要的小物件,用较少的比特来表示;而对于幅度较大的系数,如同重要的大物件,则用更多的比特表示。这样做的目的是在保证音频质量的同时,尽可能地减少数据量。但量化过程不可避免地会造成一些信息损失,就像用低分辨率去拍摄照片,会丢失一些细节,但 AAC 通过巧妙的算法,将这种损失控制在人耳难以察觉的范围内。

  6. 熵编码: 量化后的音频数据,还能进一步压缩,这就要靠熵编码技术了,常见的如霍夫曼编码等。熵编码就像是一根神奇的魔法棒,它利用数据的统计特性,对出现概率高的符号用较短的编码表示,对出现概率低的符号用较长的编码表示。比如在一段音频数据中,如果某个量化值经常出现,就给它分配一个短编码;而很少出现的量化值,就用长编码。通过这种方式,进一步减少了数据量,让音频文件变得更小,同时又能保证在解码时准确还原数据。

  7. **打包和封装:**经过前面一系列复杂的处理,压缩后的音频数据还需要进行最后的 "包装"------ 打包和封装。这一步就像是把整理好的物品整齐地装进一个包装盒里,同时附上详细的清单和标识。AAC 编码会把这些压缩后的音频数据打包为 AAC 格式的数据流,并且添加音频元数据,比如采样率、声道数等重要信息,以及同步信息,这些信息就像是包装盒上的标签和说明书,方便接收设备准确地解析和播放音频数据。

二、认识 ADTS 格式

在打包和封装后,AAC会把编码后的音频数据集存成ADIF格式或ADTS格式,ADIF格式的解码必须在明确定义的开始处进⾏。故这种格式常⽤在磁盘⽂件中。而ADTS这种格式的特征是它是⼀个有同步字的⽐特流,解码可以在这个流中任何位置开始。它的特征类似于mp3数据流格式。由于⽬前⼀般编码后的和抽取出的都是 ADTS格式的⾳频流,所以我们着重介绍ADTS格式。

(一)ADTS 是什么

ADTS(Audio Data Transport Stream,音频数据传输流)是一种 AAC 音频数据的传输格式,它为 AAC 编码后的音频数据提供了一种结构化的封装方式。可以把 ADTS 格式想象成一个精美的包装盒,AAC 编码后的音频数据就像珍贵的礼物被装在这个盒子里,方便在不同的设备和系统中传输和处理。ADTS 格式定义了音频数据的帧结构、同步信息、错误检测等内容,确保音频数据能够准确无误地被接收和播放。

(二)ADTS 的帧结构

  1. ADTS 头:ADTS 头是 ADTS 帧的重要组成部分,它包含了许多关键信息。ADTS 头的长度一般为 7 或 9 个字节(取决于是否包含 CRC 校验字段),就像一个小而强大的 "指挥中心"。在这个 "指挥中心" 里,有采样率索引,它告诉接收设备音频数据的采样率是多少;还有声道配置信息,让设备知道这是单声道、立体声还是多声道音频;另外,帧长度字段则明确了整个 ADTS 帧的长度,方便接收设备准确地解析数据。

  2. AAC 音频数据:在 ADTS 头之后,就是经过 AAC 编码的音频数据了。这些数据按照一定的规则排列,是我们最终听到的声音的数字体现。不同的 AAC 编码配置,会导致音频数据的结构和内容有所不同,但都被有序地封装在 ADTS 帧中。

adts_fixed_header()大小28bits,具体内容包括

  • syncword :同步头 总是0xFFF, all bits must be 1,代表着⼀个ADTS帧的开始
  • ID:MPEG标识符,0标识MPEG-4,1标识MPEG-2
  • Layer:always: '00'
  • protection_absent:表示是否误码校验。注意,这一位为1那么没有CRC校验字段,那么ADTS 头为7字节,如果这意味为0,那么有CRC校验字段,那么ADTS 头为9字节.
  • CRC and 0 if there is CRC
  • profile:表示使⽤哪个级别的AAC,如01 Low Complexity(LC)--- AAC LC,有些芯⽚只⽀持AAC LC
  • sampling_frequency_index:表示使⽤的采样率下标,通过这个下标在Sampling Frequencies数组中查找得知采样率的值。
  • channel_configuration: 表示声道数,⽐如2表示⽴体声双声道

固定头信息中的数据每⼀帧都相同

adts_variable_header()大小28bits,具体内容包括

  • 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原始帧。 所以说number_of_raw_data_blocks_in_frame == 0 表示说ADTS帧中有⼀个 AAC数据块。

可变头信息中的数据每⼀帧可能不同

(三)ADTS 格式的优势

  1. 同步性好:ADTS 格式具有良好的同步性。它的帧结构中包含了同步字,接收设备可以通过检测同步字快速找到 ADTS 帧的起始位置,实现音频数据的准确同步。这就好比在一场接力比赛中,每个运动员都能准确地找到交接棒的位置,保证比赛的顺利进行。在实时音频传输场景中,如网络直播、语音通话等,这种良好的同步性尤为重要,能够确保声音的连贯和稳定。

  2. 错误检测与纠正:ADTS 格式支持错误检测和部分纠正功能。通过 CRC(循环冗余校验)字段,接收设备可以检测到数据在传输过程中是否发生错误。如果发现错误,虽然不能完全纠正,但可以采取相应的措施,如丢弃错误帧,避免错误数据对音频播放质量的影响。这就像给音频数据穿上了一层 "防护衣",在一定程度上保证了音频的质量。

三、AAC 编码与 ADTS 格式的应用场景

(一)在线音乐平台

如今,我们常用的在线音乐平台,如 QQ 音乐、网易云音乐等,大多采用 AAC 编码结合 ADTS 格式来存储和传输音乐文件。这样做的好处显而易见,一方面,AAC 编码可以在保证音质的前提下,减小音乐文件的大小,节省用户的流量和设备存储空间;另一方面,ADTS 格式的良好同步性和错误检测功能,确保了音乐在网络传输过程中的稳定性,让用户能够流畅地播放音乐,享受高品质的听觉盛宴。

(二)视频媒体

在视频领域,无论是电影、电视剧,还是各种短视频平台,AAC 编码和 ADTS 格式也被广泛应用。高清视频往往伴随着高质量的音频,AAC 编码的多声道支持和优秀的音质表现,能够完美地配合视频画面,为观众带来沉浸式的视听体验。而 ADTS 格式的结构化封装,使得音频数据能够与视频数据准确同步,避免了声画不同步的问题。例如,在观看高清电影时,我们能清晰地听到从各个方向传来的声音,仿佛置身于电影场景之中,这都离不开 AAC 编码和 ADTS 格式的功劳。

(三)移动设备音频应用

在移动设备上,如手机、平板电脑等,资源相对有限,对音频文件的大小和播放效率有较高的要求。AAC 编码的高效压缩特性和 ADTS 格式的简洁结构,使其成为移动设备音频应用的理想选择。无论是手机自带的音乐播放器,还是各种音频编辑 APP,都常常采用 AAC 编码和 ADTS 格式来处理音频数据,既能保证音频质量,又能适应移动设备的性能和存储限制。

四、AAC 编码与 ADTS 格式的发展展望

随着技术的不断进步,音频领域也在持续发展。未来,AAC 编码和 ADTS 格式有望进一步优化,以适应更高的音频质量需求和更复杂的应用场景。例如,在虚拟现实(VR)和增强现实(AR)领域,对音频的空间感和实时性要求极高,AAC 编码和 ADTS 格式可能会进一步提升多声道处理能力和同步性能,为用户创造更加逼真的音频环境。同时,随着 5G 网络的普及,网络带宽的提升为高质量音频传输提供了更广阔的空间,AAC 编码和 ADTS 格式也可能会利用这一优势,进一步提高音频的码率和音质,为我们带来更加卓越的音频体验。

AAC 编码原理和 ADTS 格式是数字音频技术的重要成果,它们在众多领域的广泛应用,极大地丰富了我们的数字生活。通过深入了解它们的原理、格式和应用,我们能够更好地欣赏和利用数字音频资源,也能为相关技术的进一步发展贡献自己的智慧。希望这篇文章能让你对 AAC 编码原理和 ADTS 格式有更深入的认识,在数字音频的世界里探索更多的精彩。

相关推荐
RIKI_11 小时前
【浅学】Windows下ffmpeg+nginx+flv将本地视频推流在本地搭建的Web前端页面中播放,超详细步骤
windows·nginx·ffmpeg·html
hunandede1 小时前
AVFormatContext 再分析零
ffmpeg
hunandede2 小时前
AVInputFormat 再分析
ffmpeg
hunandede2 小时前
AVDictionary 再分析
ffmpeg
yanjiee2 小时前
用docker ffmpeg测试视频vmaf分数,很快不用编译
docker·ffmpeg·音视频
开开心心就好4 小时前
快速搜索与管理PDF文档的专业工具
java·运维·windows·pdf·自动化·excel·音视频
雨中的风铃子5 小时前
taro小程序如何实现大文件(视频、图片)后台下载功能?
小程序·音视频·taro
NO Exception?15 小时前
完美解决 mobile-ffmpeg Not overwriting - exiting
android·ffmpeg·pcm
shao91851615 小时前
Gradio全解20——Streaming:流式传输的多媒体应用(3)——实时语音识别技术
人工智能·ffmpeg·语音识别·transformers·gradio·asr