需要安装msys2(是一个在windows中模拟linux操作系统的软件) 由于在linux中编译ffmpeg比较简单,
所以利用一下msys2, 直接去官网下载安装即可
需要安装visual studio 2019
使用vs2019+msys2的环境来编译ffmpeg源码
1,打开vs2019命令行工具
想要编译出64位的库就选64位的命令行工具, 这里选用32位的作为示范
2,输入cl命令 确认下存在编译工具
3,打开msys2_shell.cmd文件 : 修改文件
4,在之前打开的vs2019命令行工具输入命令:
msys2_shell.cmd -mingw32
命令执行后会打开msys2命令行
5,在msys2中输入cl命令 以确认继承了vs2019的环境
在编译ffmpeg需要编译汇编代码, 需要安装编译汇编代码的工具:
msys2中的安装指令是 pacman
pacman -S nasm
pacman -S yasm
还有一些其他工具 :
pacman -S make cmake
pacman -S diffutils 比较工具 (避免生成makefile时出错)
pacman -S pkg-config 库配置工具
pacman -S git
ffmpeg库中是默认支持 x264,x265,aac的解码的, 但是不支持其编码 所以要手动编译成x264,x265,aac库
编译x264
下载x264源码
http://download.videolan.org/pub/videolan/x264/snapshots/
源码放进msys2/home路径下
1,进入x264源码目录
2,指定编译工具, 指定编译成动态库dll
CC=cl ./configure --enable-shared
make -j32
编译完成后生成文件
执行make -install
x264动态库被安装到 /usr/local/bin中
lib库/usr/local/lib中
编译x265
在官网下载x265源码
源码放到msys2/home目录中
进入build/msys2-cl目录
注意:这里不能使用msys2中usr/bin中的cmake(暂时改个文件名即可 改成cccmake)
将usr/bin中的cmake暂时改个文件名即可改成cccmake
运行 ./make-Makefile.sh
等待编译完成
安装
make install
生成的文件复制到msys2/usr/local目录中(include , bin , lib 三个文件夹)
修改usr\local\lib\pkgconfig\x265.pc
下载aac编码器源码
源码自身就有MakeFile可以不用msys2
可以直接在vs2019控制台中运行编译
执行 nmake -f Makefile.vc开始编译
编译完成生成文件
指定安装路径
nmake -f Makefile.vc prefix=./install install
同样生成三个文件夹
生成的三个文件都放进msys2/usr/local目录
在usr/local/lib/pkgconfig中编辑并生成文件fdk-aac.pc
prefix=/usr/local
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include
Name: Fraunhofer FDK AAC Codec Library
Description: AAC codec library
Version:
Libs: -L${libdir} -lfdk-aac
Libs.private:
Cflags: -I${includedir}
下载源码这里用4.3版本放在home目录
msys2中执行命令 只需要SDK
CC=cl.exe ./configure --prefix=./install --toolchain=msvc --enable-shared --disable-programs --disable-ffplay --disable-ffmpeg --disable-ffprobe --enable-libx264 --enable-gpl --enable-libfdk-aac --enable-nonfree --enable-libx265
生成makefile时出现的错误:
在ffbuild/config.log记录了错误原因
原因:系统在默认路径MSYS2/mingw32/lib找不到pkgconfig目录
解决:MSYS2/usr/local/lib/pkgconfig搬移到MSYS2/mingw32/lib
其他一些找不到库错误基本是usr/local/lib中名字不符, 修改名字即可
ffbuild/config.log查看错误记录, 并将编译的库修改成ffmpeg认得到的名字