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,可被用來分析配置時遇到的問題。