流媒體技術學習筆記之(六)FFmpeg官方文檔先進音頻編碼(AAC)

 

先進音頻編碼(AAC)的後繼格式到MP3,和以MPEG-4部分3(ISO / IEC 14496-3)被定義。它一般用於MP4容器格式; 對於音樂,一般使用.m4a擴展名。第二最多見的用途是在MKV(Matroska)文件內,由於它比MP4更好地支持嵌入式基於文本的軟字幕。本指南中的示例將使用擴展MP4和M4A。php

FFmpeg的可支持兩個AAC-LC編碼器(AAClibfdk_aac)和一個HE-AAC(V1 / 2)編碼器(libfdk_aac)。的許可證libfdk_aac不與GPL兼容,所以GPL不容許含有不兼容的代碼的二進制文件的分發時也被包含GPL許可的代碼。所以,此編碼器已被指定爲「非自由」,您不能下載支持它的預構建的ffmpeg。這能夠經過解決編譯FFmpeg的本身。html

libfdk_aac 

Fraunhofer FDK AAC編解碼器庫。這是目前使用ffmpeg的最高質量的AAC編碼器。ffmpeg的要求要與配置--enable-libfdk-AAC(另外--enable-nonfree的,若是您還使用--enable-GPL)。但要注意,它默認爲約14kHz的(低通濾波器的細節)。若是您想保留更高的頻率,使用-cutoff 18000。只有在須要時纔將數字調整到頻率上限; 記住,更高的限制可能可聽見地下降整體質量。node

恆定比特率(CBR)模式

這些設置針對特定的比特率,樣本之間的變化較小。它能夠更好地控制文件大小,而且與HE-AAC配置文件兼容。做爲經驗法則,對於可聽的透明度,對於每一個通道使用64kb / s(所以對於立體聲爲128kb / s,對於5.1環繞聲爲384kb / s)。設置與比特率-b:一個選項。git

在M4A(MP4)容器中將音頻文件轉換爲AAC:ide

ffmpeg -i input.wav -c:a libfdk_aac -b:a 128k output.m4a

轉換視頻的5.1環繞聲音頻,只留下視頻:ui

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標誌。atom

VBR模式大體給出了每通道(如下比特率的詳細信息):spa

 
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比特率將低得多。3d

在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。

相關文章
相關標籤/搜索