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 本机工具命令提示,在窗口中输入进入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

发布了73 篇原创文章 · 获赞 26 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/twoconk/article/details/105053696