一、安装msys
安装方法见:http://blog.yundiantech.com/?log=blog&id=38
安装后复制msys.bat到msys-vs2017.bat,用notepad++打开,
加入:call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Auxiliary\Build\vcvars32.bat"
如下:

二、编译(以静态编译为例)
打开msys-vs2.17.bat
cd到ffmpeg代码所在目录,
./configure --toolchain=msvc --prefix="E:/build/ffmpeg-4.3.1" --enable-static
make
make install
三、问题修改
make过程中会遇到如下问题:
1.
fftools/cmdutils.c(1153): error C2065: “slib”: 未声明的标识符
fftools/cmdutils.c(1153): error C2296: “%”: 非法,左操作数包含“char [138]”类型
fftools/cmdutils.c(1153): error C2059: 语法错误:“数字上的错误后缀”
fftools/cmdutils.c(1153): error C2059: 语法错误:“%”
fftools/cmdutils.c(1153): error C2017: 非法的转义序列
fftools/cmdutils.c(1153): error C2015: 常量中的字符太多
fftools/cmdutils.c(1153): error C2001: 常量中有换行符
fftools/cmdutils.c(1184): error C2143: 语法错误: 缺少“)”(在“*”的前面)
fftools/cmdutils.c(1184): error C2143: 语法错误: 缺少“{”(在“*”的前面)
fftools/cmdutils.c(1184): error C2059: 语法错误:“)”
fftools/cmdutils.c(1185): error C2054: 在“options”之后应输入“(”
fftools/cmdutils.c(1286): error C2143: 语法错误: 缺少“)”(在“*”的前面)
fftools/cmdutils.c(1286): error C2143: 语法错误: 缺少“{”(在“*”的前面)
fftools/cmdutils.c(1286): error C2059: 语法错误:“)”
fftools/cmdutils.c(1287): error C2054: 在“avclass”之后应输入“(”
fftools/cmdutils.c(1296): error C2143: 语法错误: 缺少“;”(在“*”的前面)
fftools/cmdutils.c(1296): error C2100: 非法的间接寻址
2.
fftools/ffprobe.c(3090): error C2001: 常量中有换行符
fftools/ffprobe.c(3091): error C2146: 语法错误: 缺少“)”(在标识符“writer_print_string”的前面)
fftools/ffprobe.c(3091): error C2198: “writer_print_string”: 用于调用的参数太少
fftools/ffprobe.c(3198): warning C4133: “=”: 从“int *”到“SectionID *”的类型不兼容
fftools/ffprobe.c(3488): warning C4133: “=”: 从“const int *”到“const SectionID *”的类型不兼容
解决方法:
经过百度,发现是因为CC_IDENT引起的,解决方法就是直接注释掉
1.打开fftools/cmdutils.c,注释掉1153行的://av_log(NULL, level, "%sbuilt with %s\n", indent, CC_IDENT);
2.打开fftools/ffprobe.c,注释掉3090行的://print_str("compiler_ident", CC_IDENT);