網上有各種版本的介紹,建議優先參考ffmpeg官網的說明,因爲更新時間關係,可能細節有差異,但差異不大:https://trac.ffmpeg.org/wiki/CompilationGuide/MSVC
1. 下載和安裝YASM
這一步好像已經不必要,最新版的代碼中已經使用nasm來代替yasm。
YASM下載地址:http://yasm.tortall.net/Download.html,下載其64位版本Win64 .exe (64 位 Windows 通用),即頁面中的Win64 .exe (for general use on 64-bit Windows)。
下載後,將下載回來的yasm-1.3.0-win64.exe 改名爲yasm.exe,並放置於 MSYS2 安裝目錄:/msys64/usr/bin/ 中。
2、下載msys64並安裝,下一步操作即可;
3、進入msys2安裝必須要的編譯環境工具;
C:\msys64\usr>cd ..
C:\msys64>msys2_shell.cmd -mingw32 後
更新其他包
john@LIYIZHANG-PC MINGW64 ~
分別安裝32位版本和64位版本的工具鏈
$ pacman -S mingw-w64-i686-gcc
$ pacman -S mingw-w64-x86_64-gcc
$ pacman -S libtool
$ pacman -S autoconf
$ pacman -S automake
$ pacman -S awk
$ pacman -S base-devel
如果安裝失敗,請搜索修改pacman的源到國內的地址,一定要安裝成功,失敗了可以多重試幾次;
下載完成後,重命名msys64/usr/bin/link.exe 爲msys64/usr/bin/link.bak, 避免和MSVC 的link.exe牴觸;
4、先修改文件msys2_shell.cmd:註釋掉set MSYS2_PATH_TYPE=inherit前面的; 然後在開始菜單中輸入: vs 2017就會出現列表,選擇打開適用於 VS 2017 的 x64 本機工具命令提示,在窗口中輸入進入msys64所在目錄後
啓動mingw;
64位的啓動:
c:\msys64>msys2_shell.cmd –mingw64
32位的啓動:
c:\msys64>msys2_shell.cmd –mingw32
5、編譯安裝x264,注意32位和64位的編譯的不同:
如果是編譯32位版本的x264,請打開MSYS2 MinGW 32-bit,然後執行以下命令:
c:\msys64>msys2_shell.cmd -mingw32
./configure --prefix=/usr/local/ --host=i686-w64-mingw32 --enable-shared --extra-ldflags=-Wl,--output-def=libx264.def
如果是編譯64位版本的x264,請打開MSYS2 MinGW 64-bit,然後執行以下命令:
./configure --prefix=../build --host=x86_64-w64-mingw32 --enable-shared --extra-ldflags=-Wl,--output-def=libx264.def
將DEF文件轉換爲Lib文件
打開Visual Studio的VC/Bin目錄,下面有個lib工具可以用來生成Lib文件
32位版本Lib文件生成:
VC/Bin/Lib /DEF:libx264.def /machine:x86
64位版本Lib文件生成:
VC/Bin/amd64/Lib /DEF:libx264.def /machine:x64
6、配置編譯ffmpeg,在開始菜單中輸入: vs 2017就會出現列表,選擇打開適用於 VS 2017 的 x64 本機工具命令提示,在窗口中輸入進入msys64所在目錄後,啓動mingw64:
c:\msys64>msys2_shell.cmd –mingw64
64位的:
./configure --target-os=win64 --arch=x86_64 --toolchain=msvc --enable-asm --enable-yasm --disable-avdevice --disable-doc --disable-ffplay --disable-ffprobe --enable-cross-compile --enable-shared --enable-static --disable-bzlib --disable-libopenjpeg --disable-encoders --disable-iconv --disable-zlib --prefix=../ffmpeg_build_x86 --enable-gpl --enable-nonfree --enable-encoder=libx264 --enable-encoder=mjpeg --enable-libx264 --extra-cflags="-I/usr/local/include" --extra-ldflags="-LIBPATH:/usr/local/lib"
32位的:
./configure --target-os=win32 --arch=i386 --toolchain=msvc --enable-asm --enable-yasm --disable-avdevice --disable-doc --disable-ffplay --disable-ffprobe --enable-cross-compile --enable-shared --enable-static --disable-bzlib --disable-libopenjpeg --disable-encoders --disable-iconv --disable-zlib --prefix=../ffmpeg_build_x86 --enable-gpl --enable-nonfree --enable-encoder=libx264 --enable-encoder=mjpeg --enable-libx264 --extra-cflags="-I/usr/local/include" --extra-ldflags="-LIBPATH:/usr/local/lib"
注意--extra-ldflags和--extra-cflags配置的x264中,必須區分引用的是32位的x264還是64位的,否則會一直出現找不到libx264錯誤的情況;
不能使用make -j4並行編譯,雖然很快,但可能會出現 Could not create temporary library的錯誤,另外,也有可能是--prefix所在路徑不存在或者磁盤空間不夠了導致的。
參考:https://it3q.com/article/45
https://blog.csdn.net/xinxinsky/article/details/79877794