先進音頻編碼(AAC)的后繼格式到MP3,和以MPEG-4部分3(ISO / IEC 14496-3)被定義。它通常用於MP4容器格式; 對於音樂,通常使用.m4a擴展名。第二最常見的用途是在MKV(Matroska)文件內,因為它比MP4更好地支持嵌入式基於文本的軟字幕。本指南中的示例將使用擴展MP4和M4A。
FFmpeg的可支持兩個AAC-LC編碼器(AAC&libfdk_aac)和一個HE-AAC(V1 / 2)編碼器(libfdk_aac)。的許可證libfdk_aac不與GPL兼容,因此GPL不允許含有不兼容的代碼的二進制文件的分發時也被包含GPL許可的代碼。因此,此編碼器已被指定為“非自由”,您不能下載支持它的預構建的ffmpeg。這可以通過解決編譯FFmpeg的自己。
libfdk_aac
Fraunhofer FDK AAC編解碼器庫。這是目前使用ffmpeg的最高質量的AAC編碼器。ffmpeg的要求要與配置--enable-libfdk-AAC(另外--enable-nonfree的,如果您還使用--enable-GPL)。但要注意,它默認為約14kHz的(低通濾波器的細節)。如果您想保留更高的頻率,使用-cutoff 18000。只有在需要時才將數字調整到頻率上限; 記住,更高的限制可能可聽見地降低總體質量。
恆定比特率(CBR)模式
這些設置針對特定的比特率,樣本之間的變化較小。它可以更好地控制文件大小,並且與HE-AAC配置文件兼容。作為經驗法則,對於可聽的透明度,對於每個通道使用64kb / s(因此對於立體聲為128kb / s,對於5.1環繞聲為384kb / s)。設置與比特率-b:一個選項。
在M4A(MP4)容器中將音頻文件轉換為AAC:
ffmpeg -i input.wav -c:a libfdk_aac -b:a 128k output.m4a
轉換視頻的5.1環繞聲音頻,只留下視頻:
ffmpeg -i input.mp4 -c:v copy -c:a libfdk_aac -b:a 384k output.mp4
轉換的視頻與libx264,對一個700MB(= 5734400kb)CD-ROM安裝一個90分鍾的電影,縮混音頻兩個通道(Windows用戶應該使用的目標NUL而不是的/ dev / null的):
ffmpeg -y -i input.mp4 -c:v libx264 -b:v 933k -preset:v veryfast -pass 1 -an / dev / null && \ ffmpeg -i input.mp4 -c:v libx264 -b:v 933k -preset:v veryfast -pass 2 \ -ac 2 -c:a libfdk_aac -b:128k output.mp4
可變比特率(VBR)模式
靶向質量,而不是一個特定的比特率。1是最低質量,5是最高質量。設置與該VBR水平-vbr標志。
VBR模式大致給出了每通道(以下比特率的詳細信息):
VBR | kbps /信道 | AOT |
1 | 20-32 | LC,HE,HEv2 |
2 | 32-40 | LC,HE,HEv2 |
3 | 48-56 | LC,HE,HEv2 |
4 | 64-72 | LC |
5 | 96-112 | LC |
HE比特率將低得多。
在M4A(MP4)容器中將音頻文件轉換為AAC:
ffmpeg -i input.wav -c:a libfdk_aac -vbr 3 output.m4a
僅轉換視頻的音頻:
ffmpeg -i input.mp4 -c:v copy -c:a libfdk_aac -vbr 3 output.mp4
轉換與視頻libx264和音頻縮混到兩個渠道:
ffmpeg -i input.mp4 -c:v libx264 -crf 22 -preset:v veryfast \ -ac 2 -c:a libfdk_aac -vbr 3 output.mp4
高效率AAC
這是針對低比特率(版本1和版本2)定制的一對AAC配置文件。HE-AAC版本1適合低於64kb / s(立體聲音頻)下降到約48kb / s的比特率,而HE-AAC版本2適用於低至32kb / s的比特率(同樣,對於立體聲)。
注意: HE-AAC版本2只處理立體聲。如果您有單聲道,或想要下混音為單聲道,請使用HE-AAC版本1。
不幸的是,可以播放AAC-LC(默認配置文件的許多設備libfdk_aac)根本無法起到HE-AAC的任一版本,所以這是不推薦的環繞聲音頻,通常需要與這樣的硬件播放器兼容。如果你只是打算在電腦上播放,或者你確定你的硬件播放器支持HE-AAC,你可以針對版本1的比特率為160kb / s,對於版本2的比特率為128kb / s。 ,實驗看看什么對你的耳朵有用。
HE-AAC版本1
ffmpeg -i input.wav -c:a libfdk_aac -profile:aac_he -b:64k output.m4a
HE-AAC版本2
ffmpeg -i input.wav -c:a libfdk_aac -profile:aac_he_v2 -b:a 32k output.m4a
本地FFmpeg的AAC編碼
原生FFmpeg AAC編碼器。這是目前第二高質量的AAC編碼器可用於FFmpeg,不需要像這里描述的其他AAC編碼器的外部庫。這是默認的AAC編碼器。
注意: -strict實驗(或-strict -2)以前需要這種編碼器中,但它是不再試驗和這些選項是不必要的,因為2015年12月5日。
例如使用-b:a
ffmpeg -i input.wav -c:a aac -b:a 160k output.m4a
例如使用-q:a
ffmpeg -i input.wav -c:a aac -q:a 2 output.m4a
有效范圍為-q:一個是0.1-2左右。這個VBR是實驗性的,並且可能獲得比CBR更差的結果。
不推薦使用/取出編碼器
libfaac
免費軟件高級音頻編碼器,該庫的支持已被刪除。
libvo_aacenc
視龍AAC編碼庫。該庫的支持已被刪除。使用原生FFmpeg編碼器:它提供更好的質量和支持超過2個通道。
libaacplus
AAC +編碼庫,支持該庫已被刪除。使用 libfdk_aac不是為HE-AAC:它在所有碼率一貫更好。
元數據
您可以向本指南的任何示例添加元數據:
ffmpeg -i input ... -metadata author =“FFmpeg Bayou Jug Band”-metadata title =“Decode my Heart(Let's Mux)”output.mp4
漸進式下載
默認情況下,MP4 muxer在音頻流('mdat'atom)之后的文件末尾寫入'moov'原子。這導致用戶需要在可以進行播放之前完全下載文件。將此moov原子重定位到文件的開頭可以方便在客戶端完全下載文件之前回放。
你可以用做-movflags +的fastStart選項:
ffmpeg -i input.wav -c:a libfdk_aac -movflags + faststart output.m4a
您也可以在現有MP4 / M4A文件上使用此選項。由於音頻的僅僅是數據流復制有重新編碼沒有發生,只是重新混流,等於是沒有質量損失:
ffmpeg -i input.m4a -c:a copy -movflags + faststart output.m4a
常見問題
哪個編碼器提供最好的質量?
對於AAC-LC:libfdk_aac > Native FFmpeg AAC encoder (aac).
對於HE-AAC你有一個選擇:libfdk_aac。
我應該使用AAC-LC還是HE-AAC?
如果您需要低音頻比特率,例如≤32kbs /通道,那么HE-AAC將值得考慮,如果您的播放器或設備可以支持HE-AAC解碼。由於較少的處理,任何較高的可能從AAC-LC獲益更多。如果有疑問,使用AAC-LC。所有支持HE-AAC的玩家也支持AAC-LC。