# [FFmpeg] AAC 編碼基本說明 ## 簡介 Advanced Audio Coding (AAC) 是 MP3 的後繼格式,它被定義於 MPEG-4 part 3 (ISO/IEC 14496-3)。它通常使用在 MP4 容器內;對於音樂習慣上使用 .m4a 副檔名。第二常見使用是在 MKV (Matroska) 檔內,因為它比 MP4 支援更多以文字為基礎的軟字幕 (例如 ass, ssa...)。本文中的範例將使用 MP4 與 M4A 副檔名。 FFmpeg 可以支援 4 個 AAC-LC 編碼器 (aac, libfaac, libfdk_aac, libvo_aacenc) 與兩個 AAC-HE 編碼器 (libaacplus, libfdk_aac)。libaacplus, libfaac, libfdk_aac 的授權不與 GPL 相容,所以當 GPU 授權原始碼也包含在內時 GPU 不允許包含原始碼授權依據這些授權的二進位檔的發布。因此這些編碼器被指定為 "non-free",且你不能下載內建它們的 ffmpeg。這可以透過自行編譯 ffmpeg 來解決。 對於 AAC-LC 品質而言,其答案可能是: Native FFmpeg AAC encoder (aac) >= libfdk_aac > libfaac > libvo_aacenc > 註:`>=` 代表大於或等於。 Non-free FFmpeg 自動建置腳本: https://github.com/m-ab-s/media-autobuild_suite ## 位元率 推薦位元率: $$ 位元率 >= 128kbps * 聲道數 / 2 $$ 由以上得知, 雙聲道推薦 位元率 >= 128kbps,6聲道則推薦位元率 384kbps。 ## libfdk_aac 編碼器 The Fraunhofer FDK AAC 編解碼程式庫,這是目前 ffmpeg 所能提供的最高品質 AAC 編碼器。此為額外編碼碼函式庫,需要 ffmpeg 建置組態 (configuration) 中含有 -`-enable-libfdk-aac` (如果也使用 --enable-gpl 則還需要 `--enable-nonfree`)。 ### Constant Bit Rate (CBR, 常數位元速率) 模式 指定一個目標位元速率。它可以讓你精準控制輸出檔案大小 (= 位元率 * 時間長度),且它與 HE-AAC profile 相容。 範例: 轉換一個音訊檔為 AAC 並以 M4A (MP4) 容器來封裝: ```powershell ffmpeg -i input.wav -c:a libfdk_aac -b:a 128k output.m4a ``` 轉換一個影片的 5.1 生到音訊為 AAC,並複製其視訊串流: ```powershell ffmpeg -i input.mp4 -c:v copy -c:a libfdk_aac -b:a 384k output.mp4 ``` ### Variable Bit Rate (VBR, 可變位元速率) 模式 指定一個目標品質,而不是特定的位元速率。設定值範圍為 1-5,較高的值會得到較高的位元率與品質。使用 `-vbr` 選項來設定 VBR 等級。 範例: 轉換一個音訊檔為 AAC 並以 M4A (MP4) 容器來封裝: ```powershell ffmpeg -i input.wav -c:a libfdk_aac -vbr 3 output.m4a ``` 轉換一個影片的 5.1 生到音訊為 AAC,並複製其視訊串流: ```powershell ffmpeg -i input.mp4 -c:v copy -c:a libfdk_aac -vbr 3 output.mp4 ``` ### High-Efficiency AAC 簡稱 AAC-HE 又名為 aacPlus,這是一對專門針對低位元速率的 AAC profiles (version 1 與 version 2),AAC-HE v1。對於雙聲道而言 ,AAC-HE v1 適用於 64kbps 以下,而 AAC-HE v2 適用於 32kbps 以下。但大多數播放設備不支援播放任何版本的 AAC-HE 而只能播放 AAC-LC。 > 注意:AAC-HE v2 只能支援雙聲道。對於單聲道,則使用 AAC-HE v1。 如果需要指定 Profile 則使用 `-profile` 選項。 Profiles: * aac_low MPEG-4 AAC LC (default) * aac_he MPEG-4 HE-AAC (SBR) * aac_he_v2 MPEG-4 HE-AAC v2 (SBR+PS) * aac_ld MPEG-4 AAC LD * aac_eld MPEG-4 AAC ELD 例如: ```powershell ffmpeg -i input.wav -ac 2 -c:a libfdk_aac -profile:a aac_he -vbr 3 output.m4a ``` ## 原生 FFmpeg AAC 編碼器 原生 FFmpeg AAC 編碼器,這是目前 ffmpeg 所能提供的第二高品質 AAC 編碼器。而且它已包含在 ffmpeg 內,不像本文中其它 AAC 編碼器那樣需要一個外部程式庫。在 128kbps 位元速率通常可以產生與 `libfdk_aac` 相同甚至更高的品質,但在 96kbps 以下偶爾聽起來會比較差。這是預設的 AAC 編碼器。缺點是此編碼器還不支援 AAC-HE profile。 ### 指定位元率 使用 `-b` 選項來指定輸出位元率為 160kbps: ```powershell ffmpeg -i input.wav -c:a aac -b:a 160k output.m4a ``` ### 指定品質 使用 `-q` 選項來指定輸出品質等級為 6: ```powershell ffmpeg -i input.wav -strict experimental -c:a aac -q:a 6 output.m4a ``` 設定值有效範圍為 0.1 - 10。比較高的設定值會得到較高的輸出品質與位元率大小。此 VBR 是實驗性的並且有可能得到比 CBR 更差的結果。 ###### tags: `ffmpeg`
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.