天天看點

MPEG-4标準定義的音頻壓縮格式AAC詳解

一、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後就可以解決。

繼續閱讀