AAC(Advanced Audio Coding,譯為:高階音訊編碼),是由Fraunhofer IIS、杜比實驗室、AT&T、Sony、Nokia等公司共同開發的有損音訊編碼和檔案格式。
對比MP3
AAC被設計為MP3格式的後繼產品,通常在相同的位元率下可以獲得比MP3更高的聲音質量,是iPhone、iPod、iPad、iTunes的標準音訊格式。
AAC相較於MP3的改進包含:
- 更多的取樣率選擇:8kHz ~ 96kHz,MP3為16kHz ~ 48kHz
- 更高的聲道數上限:48個,MP3在MPEG-1模式下為最多雙聲道,MPEG-2模式下5.1聲道
- 改進的壓縮功能:以較小的檔案大小提供更高的質量
- 改進的解碼效率:需要較少的處理能力進行解碼
- ......
規格
AAC是一個龐大家族,為了適應不同場合的需要,它有很多種規格可供選擇。下面列舉其中的9種規格(Profile):
- MPEG-2 AAC LC:低複雜度規格(Low Complexity)
- MPEG-2 AAC Main:主規格
- MPEG-2 AAC SSR:可變取樣率規格(Scaleable Sample Rate)
- MPEG-4 AAC LC:低複雜度規格(Low Complexity)
- 現在的手機比較常見的MP4檔案中的音訊部分使用了該規格
- MPEG-4 AAC Main:主規格
- MPEG-4 AAC SSR:可變取樣率規格(Scaleable Sample Rate)
- MPEG-4 AAC LTP:長時期預測規格(Long Term Predicition)
- MPEG-4 AAC LD:低延遲規格(Low Delay)
- MPEG-4 AAC HE:高效率規格(High Efficiency)
最早是基於MPEG-2標準,稱為:MPEG-2 AAC。後來MPEG-4標準在原來基礎上增加了一些新技術,稱為:MPEG-4 AAC。
LC和HE
雖然上面列舉了9種規格,但我們目前只需要把注意力放在常用的LC和HE上。下圖很好的展示了從LC到HE的發展歷程。
LC
LC適合中等位元率,比如96kbps ~ 192kbps之間。
MPEG-4 AAC LC等價於:
- MPEG-2 AAC LC + PNS
PNS(Perceptual Noise Substitution)譯為:感知噪聲替代。
- PNS可以提高AAC的編碼效率
HE
HE有v1和v2兩個版本,適合低位元率:
- v1:適合48kbps ~ 64kbps
- v2:適合低於32kbps,可在低至32kbps的位元率下提供接近CD品質的聲音
v1
MPEG-4 AAC HE v1的別名:
- aacPlus v1
- eAAC
- AAC+
- CT-aacPlus(Coding Technologies)
- Coding Technologies是瑞典是一家技術公司
- 在2007年,被杜比實驗室(Dolby Laboratories)以2.5億美元收購
MPEG-4 AAC HE v1等價於:
- MPEG-4 AAC LC + SBR
SBR(Spectral Band Replication)譯為:頻段複製。
- 是一種增強的壓縮技術
- 可以將高頻訊號儲存在少量的SBR data中
- 解碼器可以根據SBR data恢復出高頻訊號
v2
MPEG-4 AAC HE v2的別名:
- aacPlus v2
- AAC++
- eAAC+、Enhanced AAC+
MPEG-4 AAC HE v2等價於:
- MPEG-4 AAC HE v1 + PS
PS(Parametric Stereo)譯為:引數立體聲。
- 是一種有損的音訊壓縮演算法,可以進一步提高壓縮率
- 可以將左右聲道訊號組合成單聲道訊號,聲道之間的差異資訊儲存到少量的PS data中(大概佔2 ~ 3kbps)
- 解碼器可以根據PS data中恢復出立體聲訊號
編解碼器
如果想對PCM資料進行AAC編碼壓縮,那麼就要用到AAC編碼器(encoder)。
如果想將AAC編碼後的資料解壓出PCM資料,那麼就要用到AAC解碼器(decoder)。
這裡只列舉幾款常用的AAC編解碼器:
-
- 支援LC/HE規格
- 目前已經停止開發維護
-
FFmpeg AAC
- 支援LC規格
- FFmpeg官方內建的AAC編解碼器,在libavcodec庫中
-
FAAC(Freeware Advanced Audio Coder)
- 支援LC規格
- 可以內建到FFmpeg中,名字叫做libfaac
- 從2016年開始,FFmpeg已經移除了對FAAC的支援
-
- 支援LC/HE規格
- 目前質量最高的AAC編解碼器
- 可以內建到FFmpeg中,名字叫做libfdk_aac
編碼質量排名:Fraunhofer FDK AAC > FFmpeg AAC > FAAC。
FDK AAC
在網上下載的編譯版FFmpeg,通常都是沒有內建libfdk_aac的。可以通過命令列檢視FFmpeg目前內建的AAC編解碼器。
# windows
ffmpeg -codecs | findstr aac
# mac
ffmpeg -codecs | grep aac
我這邊的輸出結果是:
DEAIL. aac AAC (Advanced Audio Coding) (decoders: aac aac_fixed )
D.AIL. aac_latm AAC LATM (Advanced Audio Coding LATM syntax)
很顯然,並沒有包含libfdk_aac。這裡給出2個解決方案:
- 下載內建了libfdk_aac的FFmpeg
- 這個版本不一定能找到
- 因為網上流傳的FFmpeg基本都是不帶libfdk_aac的,除非有某位熱心的網友剛好上傳了這個版本
- 自己手動編譯FFmpeg原始碼,將libfdk_aac內建到FFmpeg中
- 這是推薦的方案
- 自己手動編譯的話,想內建啥就內建啥
- 可以把你想要的東西都塞到FFmpeg中,不想要的就刪掉
- 也就是根據自己的需要對FFmpeg進行裁剪