簡介與其他資料:
http://www.mobile01.com/topicdetail.php?f=510&t=3734550
其他範例:
http://www.mobile01.com/topicdetail.php?f=510&t=4487462
參考資料
FFmpeg 官網:
https://trac.ffmpeg.org/wiki/Encode/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 來解決。
Non-free FFmpeg 自動建置腳本:
‧media-autobuild_suite
對於 AAC-LC 品質而言,其答案可能是:
Native FFmpeg AAC encoder (aac) >= libfdk_aac > libfaac > libvo_aacenc
※ '>=' 代表 '大於或等於'。
https://trac.ffmpeg.org/wiki/Encode/HighQualityAudio#AudioencodersFFmpegcanuse
Bitrate
雙聲道推薦 位元率 >= 128kbps.
多聲道推薦位元率:
推薦位元率 >= 雙聲道推薦位元率 * 聲道數 / 2
由以上得知, 6 聲道則推薦位元率 >= 128kbps * 6 / 2 = 384kbps
libfdk_aac
The Fraunhofer FDK AAC 編解碼程式庫,這是目前 ffmpeg 所能提供的最高品質 AAC 編碼器。需要 ffmpeg 組態 (configuration) 中含有 --enable-libfdk-aac (如果也使用 --enable-gpl 則還需要 --enable-nonfree)。
詳細資料: Fraunhofer FDK AAC - Hydrogenaud
Constant Bit Rate (CBR, 常數位元速率) 模式
指定一個目標位元速率。它可以讓你精準控制輸出檔案大小 (= 位元率 * 時間長度),且它與 HE-AAC profile 相容。
範例:
轉換一個音訊檔為 AAC 並以 M4A (MP4) 容器來封裝:
ffmpeg -i input.wav -c:a libfdk_aac -b:a 128k output.m4a
轉換一個影片的 5.1 生到音訊為 AAC,並複製其視訊串流:
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) 容器來封裝:
ffmpeg -i input.wav -c:a libfdk_aac -vbr 3 output.m4a
轉換一個影片的 5.1 生到音訊為 AAC,並複製其視訊串流:
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
例如:
ffmpeg -i input.wav -ac 2 -c:a libfdk_aac -profile:a aac_he -vbr 3 output.m4a
Native FFmpeg AAC encoder
原生 (Native) FFmpeg AAC 編碼器,這是目前 ffmpeg 所能提供的第二高品質 AAC 編碼器。而且它已包含在 ffmpeg 內,不像本文中其它 AAC 編碼器那樣需要一個外部程式庫。在 128kbps 位元速率通常可以產生與 libfdk_aac 相同甚至更高的品質,但在 96kbps 以下偶爾聽起來會比較差。這是預設的 AAC 編碼器。缺點是此編碼器還不支援 AAC-HE profile.
指定位元率
使用 -b 選項來指定輸出位元率為 160kbps:
ffmpeg -i input.wav -c:a aac -b:a 160k output.m4a
指定品質
使用 -q 選項來指定輸出品質等級為 6:
ffmpeg -i input.wav -strict experimental -c:a aac -q:a 6 output.m4a
設定值有效範圍為 0.1-10。比較高的設定值會得到較高的輸出品質與位元率大小。
此 VBR 是實驗性的並且有可能得到比 CBR 更差的結果。