FFmpeg和x264的windows版本编译安装记录


网上有各种版本的介绍,建议优先参考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 本机工具命令(32位的请选择 适用于 VS 2017 的 x64_x86 本机工具命令)提示,在窗口中输入进入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错误的情况;


配置完成后,记得修改项目根目录下生成config.h文件,这个文件虽然说不建议编辑,但是要进行一次编辑的,打包保存为utf-8编码,默认是GBK编码,编译会不断弹出编码警告,如果不嫌烦可以不管;


不能使用make -j4并行编译,虽然很快,但可能会出现 Could not create temporary library的错误,另外,也有可能是--prefix所在路径不存在或者磁盘空间不够了导致的。

呱牛笔记

请先登录后发表评论
  • 最新评论
  • 总共0条评论