当前位置: 首页 > news >正文

音视频学习(五十一):AAC编码器

什么是AAC编码器?

高级音频编码(Advanced Audio Coding,简称AAC) 是一种有损音频压缩技术,旨在作为MP3的下一代标准而开发。它的主要目标是在比MP3更低的比特率下提供更好的音质,同时具备更强的灵活性和功能性。AAC编码器是实现这一技术的关键,它将未压缩的音频(如PCM)转换成压缩后的AAC格式数据流。

核心技术

AAC编码器的核心在于其高效的压缩算法,主要依赖以下几个关键技术:

改进的离散余弦变换(MDCT)

MDCT是AAC的“大脑”,它负责将时域(声音随时间变化的波形)的音频信号转换到频域(声音由哪些频率组成)。这个转换过程非常关键,因为它为后续的心理声学处理提供了基础。

  • 更长的窗长,更高的频率分辨率:AAC使用了比MP3更长的MDCT窗长(1024或960点),这使得它在分析音频信号时能够将频率划分得更细致。更高的频率分辨率意味着编码器可以更精确地识别并量化每个频率分量,特别是在处理平稳的音乐信号(如持续的和弦)时,能够更好地利用心理声学模型,去除人耳不易察觉的冗余信息,从而实现更高的压缩效率和更好的音质。
  • 动态的窗长切换,应对瞬态信号:然而,如果一直使用长窗,在处理突发性的瞬态信号(如鼓点的敲击、钹的撞击)时,就会出现一个问题:预回声(pre-echo)。这是因为长窗将瞬态信号的时间信息模糊化了,导致量化噪声在瞬态信号之前就出现了,人耳很容易察觉到这种“提前”的噪声,从而降低音质。为了解决这个问题,AAC编码器会动态地将窗长切换到较短的尺寸(128或120点)。短窗提供了更好的时间分辨率,能够更准确地捕捉瞬态信号的起始,有效避免了预回声的产生。

心理声学模型

AAC的心理声学模型是其“耳朵”,它模拟了人耳的听觉特性,决定哪些信息可以被丢弃或粗糙量化,哪些信息必须被精确保留。

  • 听觉掩蔽效应的精细利用:AAC的心理声学模型不仅利用了同时掩蔽(一个强音信号掩盖了同时出现的弱音信号),还能够利用异时掩蔽(一个强音信号结束后,其掩蔽效应还会持续一小段时间)。通过更复杂的模型,AAC能够更准确地计算出每个频段的听觉阈值,即人耳能够察觉到的最小声音响度。任何低于这个阈值的信号,都可以被安全地丢弃。
  • 比特分配的优化:基于心理声学模型计算出的听觉阈值,AAC编码器会进行一个复杂的比特分配过程。它会将有限的比特资源分配给那些对人耳更重要的频率分量,而对那些掩蔽效应强的部分,则分配较少的比特。这是一种“好钢用在刀刃上”的策略,确保在相同的比特率下,尽可能地保留最关键的听觉信息。
  • 时间噪声整形(TNS):为了进一步优化瞬态信号的编码,AAC还引入了TNS技术。它通过对量化噪声进行频谱整形,使其在时域上集中在被掩蔽的区域内,从而减少量化噪声对音质的负面影响。这进一步增强了AAC在处理复杂音乐时的表现。

高效的立体声与多声道编码

AAC在处理多声道音频时,采用了更智能的策略来减少数据冗余。

  • 联合立体声(Joint Stereo):与MP3的“强度立体声”相比,AAC的联合立体声技术更为先进。它不仅可以利用左右声道之间的相似性,将它们编码成一个“和信号”和一个“差信号”,只对差信号进行少量编码,还可以通过**参数化立体声(PS)**技术实现更极致的压缩。
  • 参数化立体声 (PS):这项技术主要应用于HE-AAC v2中,针对极低比特率的流媒体场景。PS编码器不再传输完整的两个声道,而是将它们合并成一个单声道,并附带少量描述空间位置和宽度的参数。解码器收到这些参数后,会在解码端“重建”出立体声效果。虽然这种方式会损失一些空间感和定位精度,但在带宽受限的情况下,它能够以极小的代价提供可接受的立体声体验。

频段复制技术 (SBR)

频段复制(SBR)HE-AAC的核心技术,它专门为低比特率流媒体而设计,是AAC与AAC+(HE-AAC)的主要区别。

  • 工作原理:SBR的工作原理非常巧妙。在编码时,它只对音频信号的低频部分进行完整的AAC-LC编码,而将高频部分(人耳听觉的另一关键部分)的能量包络和少量参数信息提取出来,作为“元数据”进行传输。解码器收到数据后,会根据低频信号重构出高频部分,并用元数据对这个重构的高频信号进行调整。
  • 优势:这种方法极大地节省了比特率。例如,一个原本需要96 kbps的完整AAC文件,通过SBR技术,可能只需要64 kbps甚至更低,就能实现几乎相同的听感。这使得HE-AAC在网络广播和移动流媒体等低带宽场景中具有无可比拟的优势。

主要类型

AAC标准由Fraunhofer IIS、杜比实验室、AT&T、索尼和诺基亚等多家公司共同开发,并被国际标准化组织(ISO)和国际电工委员会(IEC)采纳为MPEG-2和MPEG-4标准的一部分。随着技术的发展,AAC编码器也演变出了多个不同的配置和版本,以适应不同的应用需求。

  • AAC-LC (Low Complexity):这是最基础和最常见的AAC配置,在多数消费电子产品中被广泛使用,比如iTunes、YouTube和大多数蓝牙音频设备。它在音质和编码效率之间取得了很好的平衡。
  • HE-AAC (High-Efficiency AAC):又称AAC+,它是在AAC-LC的基础上加入了**SBR(Spectral Band Replication,频段复制)**技术。SBR编码器在低比特率下只传输低频信息,而高频信息则在解码端通过算法重构出来,这使得HE-AAC在极低的比特率下(如64 kbps以下)依然能保持较好的音质,非常适合流媒体和广播应用。
  • HE-AAC v2 (Extended HE-AAC):在HE-AAC的基础上,又增加了**PS(Parametric Stereo,参数化立体声)**技术。PS编码器不再编码完整的左右声道,而是将它们混合成一个单声道,并附加少量参数信息来描述立体声效果。这进一步提升了在极低比特率下的压缩效率,但可能会损失一些空间感。
  • xHE-AAC (Extended High-Efficiency AAC):这是最新的AAC版本,集成了SBR和PS技术,并加入了USAC(Unified Spee

主流AAC编码器

不同的厂商和开发者都推出了自己的AAC编码器实现。尽管都遵循AAC标准,但它们在编码效率、音质、速度和功能上存在差异。以下是几个主流的AAC编码器:

  • Fraunhofer FDK AAC:这是由Fraunhofer IIS(AAC的主要开发者之一)提供的开源编码器,被认为是目前性能最好的AAC编码器之一。它在音质和压缩效率方面表现出色,被广泛集成到Android等操作系统中。
  • Apple AAC (CoreAudio):苹果公司自己的AAC编码器,以其在编码速度和音质上的优异表现而闻名。iTunes、QuickTime和所有苹果设备都使用它进行编码和解码。
  • Nero AAC Encoder:曾被认为是音质最好的AAC编码器之一,尤其是在中高比特率下。虽然现在更新较少,但在音频爱好者中仍有很高的声望。
  • libfaac:一个较老的、免费的AAC编码器,在早期曾被广泛使用,但其编码质量和效率已不如FDK AAC等新一代编码器。
  • FFmpeg 内置的AAC编码器:FFmpeg项目包含了多种AAC编码器,但其内置的FFmpeg AAC(或称为libavcodec)编码质量相对一般,通常推荐使用它集成的FDK AAC编码器。

优势与应用场景

AAC编码器相比MP3具有多方面的优势:

更高的编码效率和更好的音质

在相同的比特率下,AAC的音质通常优于MP3。这得益于其更复杂的心理声学模型、更长的MDCT窗长以及更灵活的声道处理方式。例如,在96 kbps的立体声编码下,AAC的音质普遍被认为优于128 kbps的MP3。

更强的灵活性

  • 采样率范围广:AAC支持从8 kHz到96 kHz的多种采样率,而MP3的范围较窄。
  • 声道数支持多:AAC支持多达48个声道,远超MP3的5.1声道限制,使其在环绕声电影、电视广播等领域有更广阔的应用。

广泛的兼容性

虽然MP3的普及度更高,但AAC在现代设备和平台中已经得到了广泛支持。它被苹果的iTunes/Apple Music、YouTube、任天堂、索尼游戏机、以及大多数智能手机和蓝牙设备作为默认或主要音频格式。

应用场景

  • 流媒体服务:Netflix、YouTube等视频网站广泛使用AAC来压缩音轨,以提供高音质的同时节省带宽。
  • 数字广播:数字音频广播(DAB)和移动电视标准(如DVB-H)都将HE-AAC作为其音频编码标准。
  • 无线音频:蓝牙设备(如AirPods)通常使用AAC编码来传输音频,特别是在与苹果设备连接时。
  • 移动应用:iOS和Android系统都原生支持AAC,这使其成为移动应用开发中的常用音频格式。

总结

总的来说,AAC编码器通过结合先进的心理声学模型和时频变换技术,成功地在音质、压缩效率和功能性上超越了其前身MP3。它的多样化配置(LC, HE, xHE)使其能够适应从高品质音乐到极低比特率流媒体的各种场景。尽管MP3由于其历史悠久而拥有广泛的兼容性,但AAC编码器凭借其卓越的性能,已成为现代数字音频领域的主流和首选。

http://www.xdnf.cn/news/1276093.html

相关文章:

  • C4.5算法:增益率(Gain Ratio)
  • 嵌入式第二十四课!!linux应用软件编程与文件操作!!!
  • Rust 实战四 | Traui2+Vue3+Rspack 开发桌面应用:通配符掩码计算器
  • JAVA+AI简化开发操作
  • Java集合中的 LinkedList
  • 每日任务day0810:小小勇者成长记之武器精炼
  • node.js 学习笔记3 HTTP
  • Django @login_required实现登陆认证
  • C/C++内存管理函数模板
  • 小明的魔法地图:迷宫探险智慧(记忆性递归)
  • 【0基础3ds Max】主工具栏介绍(下)
  • [激光原理与应用-223]:机械 - 机加厂加工机械需要2D还是3D图?
  • Python设计模式 - 装饰模式
  • 六、RuoYi-Cloud-Plus OSS文件上传配置
  • QT常用控件三
  • Qt—— 下载、工具介绍以及新建项目
  • 从0开始的中后台管理系统-5(userList页面功能实现)
  • 40.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--扩展功能--集成网关--初始化网关
  • Pytorch进阶-timm库-00快速开始
  • (三)全栈(部署)
  • 精准计算Word文档页数的PHP类
  • 数据结构-deque(双端队列)和queue(队列)区别
  • 【npm、yarn、pnpm】特点对比,按需选择
  • Java 后端性能优化实战:从 SQL 到 JVM 调优
  • 分布微服务电商订单系统Rust编码开发[上]
  • 数组练习(一)
  • vuhub drippingblues靶场攻略
  • #4:MinIO分片上传和集群部署
  • 攻击实验(ARP欺骗、MAC洪范、TCP SYN Flood攻击、DHCP欺骗、DHCP饿死)
  • 安全运维的核心