FFmpeg全名是Fast Forward MPEG(Moving Picture Experts Group),為開源的影音多媒體處理框架,可以進行影音的解碼、編碼、編碼轉換、混合、抽取、串流和濾鏡,無論影音格式是從哪個地方出來的,從過去到現在的影音格式它幾乎都能夠支援。當然,它也可以利用LAME這款高品質的開源MP3編碼器來進行MP3轉檔。



LAME常用的MP3轉檔參數不外乎就是其內建的insaneextremestandardmedium這四種配置。insane使用CBR(固定位元率)編碼方式與MP3最大的320kbps位元率來編碼,可以得到最佳的聲音品質;extreme使用VBR(變動位元率)編碼方式與約在245kbps(44.1kHz雙聲道時)上下浮動的位元率來編碼,音質接近CBR 320kbps,正常人聽不出二者差異;standard使用VBR編碼方式與約在190kbps上下浮動的位元率來編碼,音質能被大眾接受;medium使用VBR編碼方式與約在165kbps上下浮動的位元率來編碼,音質已有明顯壓縮感,但是還算可以接受。

有關於LAME的詳細用法可以參考這篇文章:

https://magiclen.org/linux-lame/

LAME本身的指令工具固然好用,但它所支援的輸入格式有限。如果要更方便使用LAME來進行MP3轉檔,甚至是直接將影片中的音軌轉成MP3格式的話,就要透過FFmpeg來完成了。不過FFmpeg有著自己的一套複雜的命令列介面(CLI),並不像LAME本身的指令工具有提供內建的四種參數配置。

事實上,LAME的insaneextremestandardmedium這四種內建配置,分別對應著-b 320k-V 0-V 2-V 4參數。-b可以用來設定CBR編碼時所使用的最低位元率,-V則可以設定VBR編碼時的品質,數值範圍是0~9,愈低愈好。

FFmpeg提供的-b:a(-ab)和-q:a(-qscale:a)參數可分別對應LAME指令工具的-b-V參數,且根據轉換出來的位元率可以整理出下表(VBR位元率的部份以44.1kHz雙聲道時為準):

FFmpeg 參數 LAME 配置名稱 位元率範圍
-b:a 320k insane 320 kbps (CBR)
-b:a 256k 256 kbps (CBR)
-b:a 192k 192 kbps (CBR)
-b:a 160k 160 kbps (CBR)
-b:a 128k 128 kbps (CBR)
-q:a 0 extreme 220 ~ 260 kbps
-q:a 1 190 ~ 250 kbps
-q:a 2 standard 170 ~ 210 kbps
-q:a 3 150 ~ 195 kbps
-q:a 4 medium 140 ~ 185 kbps
-q:a 5 120 ~ 150 kbps
-q:a 6 100 ~ 130 kbps
-q:a 7 80 ~ 120 kbps
-q:a 8 70 ~ 105 kbps
-q:a 9 45 ~ 85 kbps

透過FFmpeg使用LAME的insane配置進行編碼的指令如下:

ffmpeg -i 輸入的影音檔案路徑 -acodec libmp3lame -b:a 320k 輸出的影音檔案路徑

透過FFmpeg使用LAME的extreme配置進行編碼的指令如下:

ffmpeg -i 輸入的影音檔案路徑 -acodec libmp3lame -q:a 0 輸出的影音檔案路徑

透過FFmpeg使用LAME的standard配置進行編碼的指令如下:

ffmpeg -i 輸入的影音檔案路徑 -acodec libmp3lame -q:a 2 輸出的影音檔案路徑

透過FFmpeg使用LAME的medium配置進行編碼的指令如下:

ffmpeg -i 輸入的影音檔案路徑 -acodec libmp3lame -q:a 4 輸出的影音檔案路徑

ABR(平均位元率)編碼

LAME的指令工具有支援ABR編碼方式,也就是說,我們可以在保有VBR優點(位元率會根據音訊複雜度自動增減)的情況下利用以下公式來預估編碼後的MP3檔案的大小:

#{{{
{ \text{固定或平均位元率(Kbps, Kb/s)} \times \text{時間(s, 秒)} \over \text{8(b/B)} } = \text{MP3檔案大小(KB)}
}}}#

使用FFmpeg來操作LAME編碼器時,若要使用ABR編碼方式,要在使用-b:a參數的同時加上-abr 1參數。例如以下指令可以輸出平均位元率約為128kbps的MP3音訊:

ffmpeg -i 輸入的影音檔案路徑 -acodec libmp3lame -b:a 128k -abr 1 輸出的影音檔案路徑