网上有各种版本的介绍,建议优先参考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