1. 程式人生 > WINDOWS開發 >win下使用mingw64編譯支援x264、x265、fdk-acc的FFMpeg

win下使用mingw64編譯支援x264、x265、fdk-acc的FFMpeg

FFMpeg編譯依賴庫安裝

nasm部分

x264、x265、ffmpeg這些工具使用nasm編譯會比較快,使用起來也會比較快。所以先安裝nasm[Tip1]

pacman -S mingw-w64-x86_64-nasm

cmake部分

其中fdk-aac、x265部分需用cmake工具編譯,所以先下載該工具[Tip2]

下載連結:https://github.com/Kitware/CMake/releases/download/v3.17.2/cmake-3.17.2.zip

解壓縮後在mingw64.exe的DOS視窗,新增cmake的bin執行目錄到環境變數中,這樣我們就可以使用cmake命令啦!

pkg-config部分

FFMpeg的編譯依賴許多標頭檔案和庫檔案,我們總不能編譯完一個庫檔案,就整理該庫所需標頭檔案供後期編譯FFMpeg使用,這樣太麻煩。FFMpeg的編譯全部使用了pkg-config工具,它會自動給出連結庫檔案所需的標頭檔案和庫檔案路徑。

pacman -S pkg-config  #這裡安裝msys下的pkg-config,因為mingw64下的該工具無法正常讀取.pc檔案的路徑
ln -s /usr/local/bin/pkg-config /mingw64/bin/pkg-config  #軟連結到mingw64執行目錄下,方便執行

開啟msys2.exe -》

執行“echo $PKG_CONFIG_PATH” -》

將結果複製貼上給mingw64.exe下的PKG_CONFIG_PATH。

這樣可以在mingw64下使用‘pkg-config‘命令獲取到msys2環境中的‘.pc‘檔案。

fdk-aac部分

下載連結:https://downloads.sourceforge.net/opencore-amr/fdk-aac-2.0.1.tar.gz

./configuremake && make install

x264部分

下載連結:https://code.videolan.org/videolan/x264/-/archive/master/x264-master.tar.bz2

./configure --enable-static
make && make install

x265部分

下載連結:https://bitbucket.org/multicoreware/x265/downloads/[Tip3]

cd x265/build/msys/
sh make-Makefiles.sh

會出現下圖配置選項:

技術分享圖片

無需作修改,點選configure,再點選generate即可。然後關閉圖形介面,回到DOS視窗,執行‘make && make install‘命令。

drawtext引數使用所需要的安裝

如果編譯出來的FFMpeg不需要使用該引數,可不執行該步驟。

安裝步驟參考:https://blog.csdn.net/u014552102/article/details/104442111

執行FFMpeg的configure

上述是安裝步驟,最後說說配置configure檔案時遇到的問題[Tip4]

configure引數

./configure --disable-ffplay --disable-ffprobe --disable-doc --disable-debug --disable-shared   --enable-static --enable-thumb --enable-neon --enable-pic  --enable-gpl --enable-version3 --enable-nonfree   --enable-libx264 --enable-libx265 --enable-libfdk_aac   --enable-libfreetype --enable-libfontconfig --enable-libfribidi   --enable-w32threads --host-os=win64   --pkg-config="/mingw64/lib/pkgconfig/" --pkg-config-flags="--static" --extra-cflags="-fPIC" --extra-cxxflags="-fPIC"

fribidi部分

如果不使用drawtext引數,可跳過該步驟。

用連結裡的方法編譯的fribidi,最後會出現make install失敗,導致pc檔案、庫目錄無法正常install至相應位置。所以需要手動cp -》

cp fribidi.pc /usr/local/
cp libfribidi-0.dll /mingw64/lib/
cp libfribidi-0.dll.def /mingw64/lib/

我就差這三個檔案,其它如.la檔案、.dll.a檔案都在相應位置。

fdk-aac部分

有個測試檔案這樣包含:#include <fdk-aac/aacenc_lib.h>。該檔案本來在libAACenc目錄下,而不是fdk-aac,如果我們不修改該測試檔案的內容,只能暫且在"/mingw64/include"目錄下建立該目錄 -》

mkdir /mingw64/include/fdk-aac  #fdk-aac的pc檔案中標頭檔案路徑是/mingw64/include,所以在這裡建目錄
cp someplace/libAACenc/aacenc_lib.h /mingw64/include/fdk-aac

aacenc_lib.h檔案中有內嵌include標頭檔案,它們都在"libSYS/include"目錄下,所以修改"pkgconfig/fdk-aac.pc"檔案,另外指定標頭檔案搜尋目錄:

技術分享圖片

x264部分

configure檔案在連結某個測試檔案時沒有指定“-L”,也沒有用到pkg-config裡的頭/庫檔案路徑,卻指定了“-lx264”,由於mingw64的DOS環境下庫的自動搜尋路徑有點問題,所以在連結前需要指定x264頭/庫檔案在哪裡可以被找到 -》

cp /usr/local/include/x264* /mingw64/include/  #如果不修改configure檔案,只好暫且把264標頭檔案路徑新增至mingw64下
export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/lib  #之前x264被編譯成靜態庫

執行FFMpeg

至此可以編譯出win下ffmpeg可執行檔案,但該版本依賴許多庫,將該程式單獨拿出來比較麻煩:

技術分享圖片

其中,libfontconfig-1.dll、zlib1.dll、libgcc_s_seh-1.dll、libintl-8.dll、libxml2-2.dll、libstdc++-6.dll、zlib1.dll、liblzma-5.dll必須是"/mingw64/bin/"目錄下的動態庫。

這樣就可以單獨使用ffmpeg:

技術分享圖片

Tips:

[Tip1]:ffmpeg較新版本:如4.2版本,如果在configure階段沒有指定--disable-asm、且彙編器為yasm,就會報錯。根據ffbuild/config.log錯誤日誌顯示,是在測試yasm時語法錯誤,所以對於較新版本,我們使用nasm來編譯ffmpeg。

[Tip2]:在ming264、msys2環境中通過pacman下載的cmake工具在編譯x265時會遇到一些QT動態庫找不到的問題,所以從官網上下載。

[Tip3]:

技術分享圖片

據上圖所示,x265需要通過mercurial版本控制工具的hg命令下載,在msys2中的pacman倉庫中有該軟體的下載方式。

技術分享圖片

這裡就不去下載該工具了,直接下載x265的壓縮包。

[Tip4]:configure日誌是ffbuild/config.log,可被用來分析配置時遇到的問題。