之所以在愉快二字上加引號,相信編譯過FFMPEG的同學會深有體會,根本不存在愉快二字,編譯FFMPEG是痛苦,尤其是在Windows環境下面。打開搜索引擎隨手搜索一把編譯FFMPEG,就會有很多文章,我相信即使你老老實實按照文章的步驟來編譯,也會心裡罵孃的。

之所以說是愉快的編譯,主要是因為windows10提供了WSL,比起以前需要用到的linux模擬環境要強很多,是非常接近原生linux系統的環境了。所以在第一次在WSL編譯FFMPEG還是順利到嚇人。當然前提是我們需要先運行一下visual studio command prompt,這個工具會將當前的控制檯配置好vs的c++

的工具的環境變數啥的,然後直接敲入bash回車,此時控制檯會啟動WSL,進入linux環境,這個linux環境是可以訪問剛才配置的環境變數的,所以可以調用windows下的編譯工具進行編譯。微軟本身提供了FFmpegInterop這個開源項目來編譯FFMPEG,但是很難用,對vs版本也有限制,我用的vs2019,所以並不支持。

雖然第一次編譯FFMPEG很順利,但是當我想讓FFMPEG帶上x265編碼器的時候,麻煩來了。首先需要編譯x265,這玩意兒做的還是很貼心,build目錄下有

arm-linux/ msys-cl/ vc10-x86_64/ vc12-x86/ vc15-x86_64/ xcode/

linux/ vc11-x86/ vc12-x86_64/ vc9-x86/

msys/ vc10-x86/ vc11-x86_64/ vc15-x86/ vc9-x86_64/

這麼多環境的編譯腳本,算是考慮周全了,我先是用linux下的,編譯通過,但轉念一想不對,我是編譯windows下的ffmpeg,鏈接linux環境的x265包肯定不對啊。試了一下用vc開頭的目錄,各種報錯,放棄了。這時候我把目光停留在了msys-cl和msys兩個目錄上了。之前搜索文章的時候,都說ffmpeg編譯要通過msys。那麼顯然用這個環境是最合適的了。

下載msys2(這個和msys還不一樣,裡面狗血劇情自行搜索),然後打開visual studio command prompt,進入msys64/usr/bin。輸入bash回車,進入msys環境,開始編譯。編譯成功,產生了windows下的lib文件和dll之類。回到ffmpeg,加入配置參數,--enable-libx265開始編譯,報找不到x265。打開日誌說找不到x265.h頭文件,可頭文件明明就在那兒啊。後來無論我把頭文件放哪兒,無論參數怎麼配置,就是死活報這個錯誤。要奔潰了。

試遍網上說的各種方法,還是報這個錯。我意識到問題不是出在這裡。暫時沒辦法的情況下嘗試了一下使用inter的編碼器,問題更多,但卻意外發現了可能是64位和32位不兼容的問題。

事實證明確實如此,在啟動visual studio command prompt的時候要選擇x64的環境,保證所有庫也是x64的,不過當我運行x265的腳本的時候卻報64 bit target not set, please launch visual studio command prompt and run ..vcvarsall.bat amd64 | x86_amd64 | amd64_x86

怎麼可能,我明明設置x64環境啊。我憤怒打開腳本,看到了如下的腳本:

target_processor=amd64
path=$(which cl)

if cl; then
echo
else
echo "please launch visual studio command prompt and run ..vcvarsall.bat amd64"
echo "and then launch msys bash shell from there"
exit 1
fi

if [[ $path == *$target_processor* ]]; then
echo
else
echo "64 bit target not set, please launch visual studio command prompt and run ..vcvarsall.bat amd64 | x86_amd64 | amd64_x86"
exit 1
fi

cmake -G "NMake Makefiles" -DCMAKE_CXX_FLAGS="-DWIN32 -D_WINDOWS -W4 -GR -EHsc" -DCMAKE_C_FLAGS="-DWIN32 -D_WINDOWS -W4" ../../source
if [ -e Makefile ]
then
nmake
fi

原來是判斷了amd64,我忽略了所有的判斷,直接執行

cmake -G "NMake Makefiles" -DCMAKE_CXX_FLAGS="-DWIN32 -D_WINDOWS -W4 -GR -EHsc" -DCMAKE_C_FLAGS="-DWIN32 -D_WINDOWS -W4" ../../source

成功!,再執行nmake,編譯出來了,接著執行ffmpeg的configure,終於成功了。make,也順利通過。功夫不負有心人。

推薦閱讀:

相關文章