一、AAC简介

AAC代表Advanced Audio Coding(高级音频编码),是一种由MPEG-4标准定义的有损音频压缩格式,由Fraunhofer发展,Dolby, Sony和AT&T是主要的贡献者。在使用MP4作为各种内容的容器格式的新多媒体MPEG-4标准中,它是MPEG Layer III / MP3的天然后继者。AAC能够在一条音轨中包括48条全带宽(直到96khz)音频声道,加上15条低频增强(LFE Low Frequency Enhanced,到120Hz)声道,直到15条数据流并且更多。

与MPEG-4视频一样,AAC有着不同的Profile,其中Low Complexity Profile(LC AAC) (也叫MAIN @ Level 2)最被广泛用于商业市场(例如Apple非常著名的iTunes音乐库),其他有象Long Term Prediction Profile(LTP/长期预测), Scalable Sampling Rate Profile(SSR/可变采样率) 和Low Delay Profile(LD/低延迟)。

HE-AAC和LC-AAC是MPEG4 AAC标准的不同的Profile(类)。LC意思是”Low Complexity”(低复杂性)而HE意思是”High Efficiency”(高效性)。HE-AAC也称之为AAC SBR/aac+/aacPlus等。注意HE-AAC注重于低码流的编码并很适合多声道文件(更小的文件尺寸)。对于HE-AAC文件,也需要一个可用的HE解码器。

从学术上讲,HE-AAC混合了AAC与SBR技术。SBR代表的是Spectral Band Replication(频段复制)。SBR的关键是在低码流下提供全带宽的编码而不会产生产生多余的信号。传统认为音频编码在低码流下意味着减少带宽和降低采样率(见MP3 FAQ #7)或产生令人不快的噪音信号。SBR解决问题的方法是让核心编码去编码低频信号,而SBR解码器通过分析低频信号产生高频信号和一些保留在比特流中的指导信号(通常码流极低,~2 kbps)。这就是采用无SBR解码器的原因,这样你的带宽(Frequency Response/频率响应)会被严重浪费。这也是为什么被叫做Spectral Band Replication的原因,它只是增加音频的带宽,而非重建。

二、AAC与其他流行音频编码的比较

其他优秀格式在128kbps与LC AAC的音质比较:

注意Lame(可用的最好MP3编码器)和Vorbis在他们最新的版本中提供了更加优良的音质(同样你可以看这里)。

也注意在这次测试中使用的WMA9 Pro编码,是一种与标准WMA9编码完全不同,并且提供更加优良音质的编码(使用在音像店和CD唱机里)并且不是向后兼容的。

低比特率和多声道编码的AAC提供了高效延展性(HE ACC),同样在低比特率中是一种最好的格式之一:

其他流行格式在64kbps与HE AAC的音质比较:

注意QT是在QuickTime中提供的LC AAC编码,He是在Nero中。

继承Parametric Stereo(参数立体声)延伸(PS AAC)技术,同时使用HE AAC用于低码率的它(Nero完善中)不得不题及。在32kbps它如何与其他编码比较可以看这里。

由rjamorim总结出公共收听测试结果,在128kbps比较这些AAC编码方式可以在这里和那里得到答案。

三、如何编码AAC?

单LC Profile:

  • FAAC (免费高级音频编码器):免费开源的LC-ACC [CLI, DirectShow (3ivx), foobar, CoolEdit, WinAMP]
  • Apple’s AAC:CBC只能用于QuickTime < 7,QuickTime 7和之后版本包括VBR AAC。Apple的编码不能处理多声道。[Quicktime专业版, iTunes]iTunes 使用同样的编码但可以免费获取。使用QuickTime编码的命令行解码器同样可行。iTunes/Apple编码是以最初Dolby编码为基础,并且为音质作了较大的调整,尽管只采用CBC但事实上音质非常好。
  • PsyTEL AACENC:多声道不要用它,因为它会产生错误的声道映射。[命令行, AACMachine ( BeSweet的GUI ) ]
  • Dicas’ Compaact AAC编码器
  • Sorenson AAC编码器
  • WinAMP版本5和以上的版本拥有在Dolby编码基础上的LC ACC编码器特色,但并没有像iTunes那么多的调节功能。

LC & HE Profile:

  • Nero Burning Rom(在额外的菜单中编码文件)和附随的Wave Editor允许LC和HE AAC两种编码。另外可以在cd-rw.org得到Nero AAC/MP4插件。
  • RealPlayer 10 黄金版和Real Producer 10同样也包括基于Coding Technologies执行的HE/LC AAC编码器。RP10 黄金版现在默认编码AAC成M4A,并且是一种极好的免费AAC编码解决方案。用Real Producer编码HE AAC,你也需要Helix的其他插件包。

GUIs/前端:

  • BeSweet:由于DSPguru的贡献,可以通过BeSweet编码Nero AAC。有两个非常优秀的GUIs,附带Doom9指南的OagMachine和BeSweetGUI。注意:BeSweet使用者需要确定使用更新的正式版本,更多信息请参阅Q#19。
  • foobar2000:使用nero aac编码/解码器插件(foo_nero.dll)你可以直接转换任何音频到Nero LC/HE AAC,同样有可以参考的指南。注意为了diskwriter插件你需要foobar特别版。用diskwriter插件和命令行的FAAC(可以从rarewares得到)Foobar也同样可以编码成FAAC aac。
  • HeadAC3he的新版本也可以从AC3, WAV或是任何其他HeadAC3he支持的输入格式编码到FAAC aac。
  • winLame:DeXt制作的multi-tool GUI,现在支持通过FAAC编码AAC。
    其他平台下(Linux, MAC OS 10, 其他等等)编码:

FAAC和FAAD是GPL(GNU通用公共许可证)软件,可以在OS X, Linux和绝大部分Unixes下编译。FAAC编码也在avidemux, mencoder, gstreamer和其他编码工具下实现。大多数主要的多媒体Distributions产品都包括这些。

普通的FAAC编译说明如下:(摘录于FAAC文档)

  1. 确保你已经安装autoconf, automake和libtool。为了支持mp4, libmp4v2必须也安装(包括在较老的faad2源中,或是新的FAAC cvs(Concurrent Version System/版本控制系统)源码)。
  2. 解压源文档:tar xvzf faac-x.xx.tar.gz
  3. dir(显示列表) cd到FAAC源码
  4. Run: # ./bootstrap
  5. # ./configure
  6. # make
  7. # make install

Binary版也同样可用于几个平台: Debian RPMs

四、AAC问答

1、有没有可能在转换AC3/DTS到AAC后还能保留5.1声道呢?

可以,用Oagmachine/BeSweetGuI就可以实现。Doom9有篇相关的教材。不过,记住AC3和DTS都是有损音频格式,任何在它们基础上的转码行为都将导致更严重的音质损失。当音频转码时并且需要大幅度减小文件体积时,HE-AAC推荐使用。同样,音频转换还可以通过graphedit搭配3ivx滤镜套件(AC3->AC3 parser->AC3 filter->3ivx audio encoder->3ivx media muxer->MP4)或者foobar来实现。需要更多AC3和DTS的转码的信息请见这两种编码各自的FAQ部分。

2、目前有没有一个开源的AAC编/解码器存在呢?

FAAC和FAAD2(仅LC)就是开源的AAC编解码器。CoreAAC Directshow filter,winamp插件和许多AAC解码器其实都是源于FAAD2,都具有解码HE-AAC和LC的能力。官方FAAC/FAAD2站点如下:www.audiocoding.com。

3、我怎么混合AAC到AVI/OGM/MKV/MP4?

AVI:AVI MUX GUI是仅有的允许混合AAC到AVI的应用软件。注意不推荐AVI作为AAC的容器格式,推荐现代的容器格式如(AAC专门容器格式)。
OGM:Ogg Mux Nic能直接混合LC AAC到OGM。对于HE-AAC,请使用3ivx滤镜套件与Graphedit。
MKV:MKVtoolnix和AVI MUX GUI都能混合AAC到Matroska。
MP4:3ivx滤镜套件与Graphedit。
Nero Recode2能自动直接把DVD转换带有NeroDigital或HE AAC的MP4。其他一些支持MP4混合的软件包括Ivan&Menno和mp4UI。更多关于MP4(MPEG-4)容器格式的信息请看MP4 FAQ。

注意当从raw .aac流混合HE-AAC时,你必须在MKVtoolnix和AVImux GUI中让muxer是“AAC is SBR”。当混合.mp4时,SBR自动被侦测。

4、关于AAC回放我需要什么?

下载并安装CoreAAC DirectShow filter或3ivx audio decoder(3ivx codec内有)都能在directshow播放器杰出地回放(LC和HE都可)。 关于最新的CoreAAC滤镜与winamp/foobar插件, 请看在HydrogenAudio.org中john33的帖子。

注意对于MP4流,在directshow播放器上回放3ivx或其他的MPEG-4分离滤镜(splitter)是必需的。对于raw AAC流,rarewares上的AACparser滤镜也是必需的。当muxing成OGM或Matroska时,适当的分离滤镜)也是必需的。更多信息请参看New Container Formats 版块的FAQs。

5、关于在linux / Unix下回放AAC有什么要求?

任何最新版及相关版的mplayer包括了对MP4格式与用FAAD解码AAC的支持。FAAD已经包含在mplayer的源码中,而且无需另外的库文件或编译。

VLC支持AAC当然MP4也是,但如果你的VLC是源码包版的你就需要安装FAAD作为AAC支持。通常你在编译VLC的源码前需要检查VLC需要的库文件目录。

MPEG-4标准定义的音频压缩格式 AAC 详解(4)
2009-02-01 www.av110.net / 整理 点击:7295次 标签:MPEG-4 AAC
6、MPEG-4与MPEG-2 AAC的不同点是什么?

事实上MPEG-4与MPEG-2 AAC流除了在文件头(header)上并没有什么区别。但是一些应用软件象QuickTime并不承认MPEG-2 AAC。使用Ivan & Menno改变文件头。别的程序象Nic的AAC Patch或foobar2000都可修正文件头。

7、.AAC,.MP4,*.M4A(audio/x-m4p AAC audio(受保护))之间的区别是什么?

AAC文件通常包含带ADTS文件头的AAC或者原始(raw)AAC数据流。Raw AAC若没有编码其中几条数据流是不能被处理的。MP4,在另一层面,是一种包含AAC流和其他许多符合MPEG4标准的东西的容器格式。这两种数据格式是很不同的,因此你不能给它们相互重命名,它们只是被混合入容器格式中或者被分离出。混合AAC到MP4和其分离Ivan & Menno可以完成。 M4A是MP4容器中常见的音轨,其实是我们自己重命名后缀的。Itunes, Winamp5和Realplayer金版现在默认都编码成M4A。注意M4A和MP4文件能通过简单重命名相互混淆,但它们都是同一种容器格式的扩展。

注意“Export ISO 13818-7 Stream”选项在Nero编码器产生的是带ADTS文件头的*.AAC文件。再次提醒这不是原始AAC数据流,Ivan & Menno能转换成原始aac。

更多关于MP4容器格式的信息请到恰当的FAQ寻找。

8、我怎样可以分割合并AAC文件?

AAC在MP4中:
MP4Box可以被用来分割合并所有包括这些AAC音频的MP4文件。完整信息可参阅此帖。

有ACC的MP4也可以直接被QuickTime专业版编辑。

原始AAC流:

原始AAC流(*.aac) 可以使用BeSplit分割合并。

分割: besplit -core( -input in.aac -prefix out -type aac -ending ) -split( 0.0 x.x )

这个命令可以剪切in.aac成两部分:0.0 秒到x.x 秒和 x.x 秒到文件结尾(-ending)。

合并:
首先产生一个列表文件,一个文本文件用分隔线把每个要被合并的文件列于表上。然后保存成join.lst并且使用BeSplit:

besplit -core( -input join.lst -prefix out -type aac -join )

也可以通过命令提示符来合并AAC流(*.aac) :
copy /b first.aac + second.aac joined.aac

9、AAC音频格式的优缺点各是什么?

优点:
低比特率(具有与其他编码可比的音质)和较小文件尺寸,要求使用SBR技术。
多声道(可以实现直到48 条全带宽声道)
AAC是MPEG-4标准的正式音频格式,并且未来硬件支持也是很有希望的。

缺点:
暂时没有单独的回放AAC可用。
AAC是重大的专利技术。

10、有没有可能通过S/PDIF端回放AAC?

这是可行的,虽然并不是所有的硬件上都可以实现。只有一部分硬件支持解码AAC,且没有一个DirectShow滤镜有能力实现AAC的信号pass-through。当然,这在将来一定会实现的。点击这里和那里阅读更多的S/PDIF和AAC的硬件支持信息。

然而,在通过S/PDIF回放AAC成为可行之前,有不少DirectShow的滤镜可以通过S/PDIF进行实时的6声道AAC=>AC3的转换,Haaan的Dolby Out DS滤镜,1.x版本的AC3Filter都可以实现。虽然,理论上来说,实时转录过程会有一定程度的音质损失,但使用640kbps全码仍然会得到完美的监听效果和最小的音质损失。

11、5.1 LC AAC和5.1HE AAC各声道的码率是如何分配的?怎样的码率设置才能使5.1的AAC各声道均分为128kbps?

为了使每个声道的码率相同,我们必须添加2x(立体声的码率)(FL(左前置)、FR(右前置)、RL(左后置)& RR(右后置))+1x(单声道的码率(Centre))+一点附加的码率给低音炮。这样的话,为了达到各声道码率统一,总码率要等于立体声码率的2.5至3倍。所以,为了得到每声道128kbps:128kbps*2.5=320kbps。对于LC AAC而言,320kbps是一个高质量的码率。然而,考虑到AAC的效率和声道联结方式,128kbps的HE-AAC同样可以提供很不错的音质及5.1声道。

12、nero使用的HE-AAC的码率是多少?

96kbps或更低的CBR码率时使用HE-AAC;流媒体或更低的VBR码率使用HE-AAC。如果输入源是5.1的aiff,则nero可以生成的128kbps的HE-AAC。

13、我在使用BSN/Oagmachine编码AAC的时候如何设置增益调节(gain)?

虽然BeSweet/Bsn有Hybrid(混合)增益调节的组件,但现在没有一个Directshow滤镜有能力处理Hybrid增益调节的信息。所以,现在我们不推荐此类设置,使用标准化或前期增益调节来代替吧。

14、有没有可以被VirtualDub调用的AAC ACM(Audio Compression Manager/声音压缩管理器)编码吗?

由于目前AAC与AVI之间并未完全兼容,所以还没有ACM AAC编码。在FAAC开发过程中曾经试图做过类似的努力却并未成功。

15、我已经安装了所有的BeSweet和Bsn文件,但Besweet/Nero并没有开始编码,请帮帮我?

要通过BeSweet/BSN/Oagmachine/BeSweet GUI来编码Nero AAC,那么有三个dll动态链接文件是必须的:’aac.dll’, ‘aacenc32.dll’和’NeroIPP.dll’。这三个dll要放入BeSweet文件夹。从60023版开始,aac.dll和aacenc32.dll要检查注册表中是否有NeroIPP的dll,所以系统中必须要安装Nero Ultra Edition或NeroMix。

16、在用OagMachine/BeSweet编码时我看不到Nero GUI编码窗口,要如何才能激活它?

Oagmachine里,在AAC编码选项下检查“show configuration dialogue”。如果你使用的是命令行模式,就请在命令行里的’-bsn’后加上’-config’即可。

17、为什么我回放用Oagmachine/BeSweet GUI编码的48Khz的AC3/DTS文件时声音会变慢?

那可能你使用的时老版本的BeSweet,从bsn.dll v0.21以后(与BeSweet捆绑)这个bug就已经被修复。请查一下你BeSweet文件的记录文件,确定你使用的是bsn.dll v0.21。
老版本更多的bug信息:
Nero编码器是通过比特率、配置和声道数来准确判定相应的采样率的。当你使用的bsn版本早于0.21时,nero内部的重采样功能默认不被打开,从而你必须在Nero编码器中手动修改采样率。这里有一篇由bond编写的关于如何决定正确的采样率及相关大量解释的文章。

18、如何我才能使自己编码出来的AAC是HE而非LC?

让CoreAAC DirectShow filter勾上“AAC+SBR”功能选项。Foobar2000里也同样如此。3ivx音频解码设置里选择的是HE-AAC。

19、在使用600X nero插件时,Oagmachine/BeSweetGUI里的哪个选项是负责控制多声道的?

在6.0011和它之前的老版本里请使用-6chold选项,而6.0011之后的请用-6chnew。

20、我用Nero编码的HE-AAC里有爆音存在,我做错了什么吗?

在Nero编码GUI里打开PNS选项后就会产生这个问题,去掉这个PNS后就可以解决。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐