在踩了无数坑之后,才有了这篇文章,现在就一个想法还是Linux系统好呀。编译什么东西都是一个套路,configure/make/make install。之前不知道为什么那么程序员会推崇用mac做开发,编译的这个问题上Mac绝对完胜Windows。

一、需要下载的工具

  • Visual Studio 2013 或 Visual Studio 2015
  • MSYS2 msys2-x86_64
  • YASM Win64.exe
  • FFmpeg源码 ffmpeg4.0.1

    二、编译环境搭建

    1. 安装MSYS2,默认安装在C:\msys64目录,安装完成后打开msys2环境,运行命令安装编译工具

    pacman -S make gcc diffutils

注:安装过程中可能会出现某些包下载失败的情况,这时只需要多试几次就好,直到提示净更新大小为0就说明安装完整了。

image

2. 修改C:\msys64\msys2_shell.cmd文件,修改下图红框里的部分,这里是为了让msys2能继承VS的环境变量

set MSYS2_PATH_TYPE=inherit

image

image

4. 将下载的yasm工具,yasm-1.3.0-win32.exe,复制到C:\msys64\usr\bin目录,将重命令为yasm.exe

image

三、准备编译

1. 打开visual studio命令行,这里要选择vs2015 x64 x86兼容工具提示符,打开方式如下图所示

image

2. 切换目录到C:\msys64,运行msy2_shell.cmd,开启msys2环境

image

3. 测试环境是否正确,检查编译工具和链接工具是不是指向的VS工具

image

四、开始编译(以下命令均在msys2环境执行)

1. 切换目录到ffmpeg源码目录
2. 运行configure脚本,相关参数参考下面,configure脚本执行的时间会比较长,耐心等待
1
2
3
4
5
6
7
8
9
10
./configure \
--prefix=./build_hwaccel \ ====> 【可选】这里指定编译完成后库的安装目录
--toolchain=msvc \ ====> 【必须】选择使用VS的工具和环境
--arch=x86 \ ====> 【必须】x86指定生成win32版本的库
--enable-x86asm \ ====> 【可选】使能x86的汇编优化
--disable-doc \ ====> 【可选】关闭ffmpeg文档输出
--enable-shared \ ====> 【必须】设置输出动态库
--disable-static \ ====> 【可选】设置关闭输出静态库
--enable-d3d11va \ ====> 【可选】设置使能d3d11硬件加速
--enable-dxva2 ====> 【可选】设置便能dxva2接口的硬件加速
3. 执行make命令,这个过程可能会有一些错误提示,可以根据提示上网进搜索相关问题,

如编译ffmpeg4.0.1需要注释与变量CC_IDENT相关的语句,存在于cmdutils.c和ff_probe.c文件中

4. 执行make install命令,将生成的动态库复制到configure时指定的目录中
5. 至此整个windows下的ffmpeg动态库编译完成