FFmpeg全名是Fast Forward MPEG(Moving Picture Experts Group),為開源的影音多媒體處理框架,可以進行影音的解碼、編碼、編碼轉換、混合、抽取、串流和濾鏡,無論影音格式是從哪個地方出來的,從過去到現在的影音格式它幾乎都能夠支援。FFmpeg也有很不錯的可攜性和可移植性,可以使用在Linux, macOS, Microsoft Windows, BSDs, Solaris等多種不同的作業系統和多種硬體架構上。



要在Ubuntu作業系統上使用FFmpeg的話,可以直接用apt install ffmpeg指令來安裝ffmpeg套件。用這樣的方式安裝Fmpeg雖然簡單,版本卻通常會比較舊,且並沒有啟用所有功能。您可能會遇到在某個地方抄到某個FFmpeg指令,在自己的電腦上使用卻無法支援的問題。

ubuntu-ffmpeg

FFmpeg的官方網站:

自行編譯 FFmpeg

為了能夠使用到更新的FFmpeg的版本,享用更強大的功能。還是要自行編譯FFmpeg才行。

您可能會想問,難道就不能夠到網路上尋找別人已經編譯好的新版的FFmpeg來用嗎?其實可以,但通常被直接提供的已編譯好的執行檔因為授權限制的因素,並不會開啟「nonfree」的功能,一些專有軟體像是libfdk-aac就會無法在這樣的FFmpeg上使用。

要編譯FFmpeg,要先到FFmpeg的官方網站取得FFmpeg的原始碼。可以選擇使用最新的FFmpeg原始碼快照(snapshot),或是最新的具有x.x.x版本號碼的FFmpeg。編譯FFmpeg會需要搭配許多其它的函式庫,設定過程十分繁瑣,所以筆者開了一個GitHub專案,可以在Docker內的Ubuntu環境中編譯出具有完整功能的FFmpeg執行檔。GitHub倉庫的網址如下:

用這個專案所編譯的FFmpeg執行檔,函式庫是以動態連結為主。如果該函式庫有在Ubuntu官方的軟體源中,就會使用官方軟體源的共享函式庫。至於一些Ubuntu官方的軟體源並未提供但也很有用的函式庫,則採取下載原始碼並編譯出靜態函式庫的方式處理。

要使用這個專案來編譯FFmpeg,您會需要安裝Docker,可以參考以下這篇文章來安裝:

接著用以下指令下載這個專案:

git clone --depth 1 https://github.com/magiclen/ubuntu-ffffmpeg

在專案目錄中執行如下的指令來編譯符合您Ubuntu作業系統版本的FFmpeg。

docker build -t ffmpeg-build -f Dockerfile.<ubuntu_name> .

以上指令中,<ubuntu_name>可以填入Jammy(即Ubuntu 22.04)。在執行這個指令之前,您可以先打開該Dockerfile看看裡面所使用的FFmpeg或是其它函式庫的版本是不是您想要的,不是的話可以自行按照同樣的方式修改。

如果成功建置出Docker image,則再執行以下指令來取得編譯好的FFmpeg執行檔。

docker run -v "$(pwd)/output":/output --name ffmpeg-build ffmpeg-build

以上指令執行完後,FFmpeg的執行檔應該就會出現在專案根目錄中的output目錄下。

在編譯過程中會產生一些Docker image,可以用以下指令來清理:

docker rm ffmpeg-build && docker image rm ffmpeg-build && docker image prune

如果您直接在Ubuntu環境執行這些FFmpeg執行檔,很可能會發生如下圖的缺少動態函式庫的問題。使用ldd指令查看可以看到缺少哪些動態函式庫。

ubuntu-ffmpeg

筆者會建議您去Dockerfile裡面尋找「Runtime Environment」這個階段的apt install指令,將其複製出來使用。這個指令可以用來安裝FFmpeg執行檔所需的動態函式庫。

ubuntu-ffmpeg

動態函式庫裝齊了,就可以正確執行FFmpeg執行檔了!

ubuntu-ffmpeg