【秒懂音視頻開發】14_AAC編碼

AAC(Advanced Audio Coding,譯爲:高級音頻編碼),是由Fraunhofer IIS、杜比實驗室、AT&T、Sony、Nokia等公司共同開發的有損音頻編碼和文件格式。php

對比MP3

AAC被設計爲MP3格式的後繼產品,一般在相同的比特率下能夠得到比MP3更高的聲音質量,是iPhone、iPod、iPad、iTunes的標準音頻格式。html

AAC相較於MP3的改進包含:算法

  • 更多的採樣率選擇:8kHz ~ 96kHz,MP3爲16kHz ~ 48kHz
  • 更高的聲道數上限:48個,MP3在MPEG-1模式下爲最多雙聲道,MPEG-2模式下5.1聲道
  • 改進的壓縮功能:以較小的文件大小提供更高的質量
  • 改進的解碼效率:須要較少的處理能力進行解碼
  • ......

規格

AAC是一個龐你們族,爲了適應不一樣場合的須要,它有不少種規格可供選擇。下面列舉其中的9種規格(Profile):windows

  • 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。ide

LC和HE

雖然上面列舉了9種規格,但咱們目前只須要把注意力放在經常使用的LC和HE上。下圖很好的展現了從LC到HE的發展歷程。ui

從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兩個版本,適合低比特率:code

  • 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

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

PS(Parametric Stereo)譯爲:參數立體聲。

  • 是一種有損的音頻壓縮算法,能夠進一步提升壓縮率
  • 能夠將左右聲道信號組合成單聲道信號,聲道之間的差別信息存儲到少許的PS data中(大概佔2 ~ 3kbps)
  • 解碼器能夠根據PS data中恢復出立體聲信號

編解碼器

若是想對PCM數據進行AAC編碼壓縮,那麼就要用到AAC碼器(encoder)。
若是想將AAC編碼後的數據解壓出PCM數據,那麼就要用到AAC碼器(decoder)。

這裏只列舉幾款經常使用的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進行裁剪
相關文章
相關標籤/搜索