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



Ogg Vorbis的oggenc指令工具常用的轉檔參數不外乎就是控制音質的-q以及控制平均變動位元率的-b-q後面接的數值範圍在-1 ~ 10之間,數值愈大音質愈高。-b後面接的數值及表示想要輸出的平均變動位元率,數值範圍在32 ~ 500之間。

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

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

Ogg Vorbis本身的指令工具固然好用,但它所支援的輸入格式有限。如果要更方便使用Ogg Vorbis來進行Ogg轉檔,甚至是直接將影片中的音軌轉成Ogg格式的話,就要透過FFmpeg來完成了。不過FFmpeg有著自己的一套複雜的命令列介面(CLI),與oggenc的用法並不相同。

oggenc-q參數會對應到FFmpeg的-q:a(-qscale:a)參數;-b參數會對應到FFmpeg的-b:a(-ab)參數。直接使用-q:a或是-b:a參數都是屬於VBR(變動位元率)的編碼方式,其實那個「q」(品質參數)和「b」(位元率參數)的數值是可以對應的,列表如下:

品質參數 位元率參數
-q:a -1 -b:a 45k
-q:a 0 -b:a 64k
-q:a 1 -b:a 80k
-q:a 2 -b:a 96k
-q:a 3 -b:a 112k
-q:a 4 -b:a 128k
-q:a 5 -b:a 160k
-q:a 6 -b:a 192k
-q:a 7 -b:a 224k
-q:a 8 -b:a 256k
-q:a 9 -b:a 320k
-q:a 10 -b:a 500k

透過FFmpeg輸出音質最高的Ogg的指令如下:

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

不過在48kHz的取樣頻率下,用到-q:a 7聽起來就與原始聲音無異了。所以比較推薦用的高音質轉檔指令如下:

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

透過FFmpeg輸出平均變動位元率逼近320kbps的Ogg的指令如下:

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

CBR(固定位元率)和ABR(平均位元率)編碼

Ogg編碼格式無CBR和ABR編碼方式,不過事實上oggenc指令工具本身有提供一個--managed參數,能讓使用者搭配-b參數來使用「managed」模式進行編碼。「managed」模式實現了CVBR(約束的變動位元率)的編碼方式,讓輸出音訊資料的位元率更逼近轉檔時輸入的位元率。不過這個「managed」模式,FFmpeg並沒有提供參數讓使用者透過CLI來調用,就看以後會不會新增了。