win下使用mingw64编译支持x264、x265、fdk-acc的FFMpeg
FFMpeg编译依赖库安装
nasm部分
x264、x265、ffmpeg这些工具使用nasm编译会比较快,使用起来也会比较快。所以先安装nasm[Tip1]。
pacman -S mingw-w64-x86_64-nasm
cmake部分
其中fdk-aac、x265部分需用cmake工具编译,所以先下载该工具[Tip2]。
下载链接:https://github.com/Kitware/CMake/releases/download/v3.17.2/cmake-3.17.2.zip
解压缩后在mingw64.exe的DOS窗口,添加cmake的bin执行目录到环境变量中,这样我们就可以使用cmake命令啦!
pkg-config部分
FFMpeg的编译依赖许多头文件和库文件,我们总不能编译完一个库文件,就整理该库所需头文件供后期编译FFMpeg使用,这样太麻烦。FFMpeg的编译全部使用了pkg-config工具,它会自动给出链接库文件所需的头文件和库文件路径。
pacman -S pkg-config #这里安装msys下的pkg-config,因为mingw64下的该工具无法正常读取'.pc'文件的路径
ln -s /usr/local/bin/pkg-config /mingw64/bin/pkg-config #软链接到mingw64执行目录下,方便执行
打开msys2.exe -》
执行“echo $PKG_CONFIG_PATH” -》
将结果复制粘贴给mingw64.exe下的PKG_CONFIG_PATH。
这样可以在mingw64下使用'pkg-config'命令获取到msys2环境中的'.pc'文件。
fdk-aac部分
下载链接:https://downloads.sourceforge.net/opencore-amr/fdk-aac-2.0.1.tar.gz
./configuremake && make install
x264部分
下载链接:https://code.videolan.org/videolan/x264/-/archive/master/x264-master.tar.bz2
./configure --enable-static
make && make install
x265部分
下载链接:https://bitbucket.org/multicoreware/x265/downloads/[Tip3]
cd x265/build/msys/
sh make-Makefiles.sh
会出现下图配置选项:
无需作修改,点击configure,再点击generate即可。然后关闭图形界面,回到DOS窗口,执行'make && make install'命令。
drawtext参数使用所需要的安装
如果编译出来的FFMpeg不需要使用该参数,可不执行该步骤。
安装步骤参考:https://blog.csdn.net/u014552102/article/details/104442111
执行FFMpeg的configure
上述是安装步骤,最后说说配置configure文件时遇到的问题[Tip4]:
configure参数
./configure --disable-ffplay --disable-ffprobe --disable-doc --disable-debug --disable-shared \
--enable-static --enable-thumb --enable-neon --enable-pic --enable-gpl --enable-version3 --enable-nonfree \
--enable-libx264 --enable-libx265 --enable-libfdk_aac \
--enable-libfreetype --enable-libfontconfig --enable-libfribidi \
--enable-w32threads --host-os=win64 \
--pkg-config="/mingw64/lib/pkgconfig/" --pkg-config-flags="--static" --extra-cflags="-fPIC" --extra-cxxflags="-fPIC"
fribidi部分
如果不使用drawtext参数,可跳过该步骤。
用链接里的方法编译的fribidi,最后会出现make install失败,导致pc文件、库目录无法正常install至相应位置。所以需要手动cp -》
cp fribidi.pc /usr/local/
cp libfribidi-0.dll /mingw64/lib/
cp libfribidi-0.dll.def /mingw64/lib/
我就差这三个文件,其它如.la文件、.dll.a文件都在相应位置。
fdk-aac部分
有个测试文件这样包含:#include <fdk-aac/aacenc_lib.h>。该文件本来在libAACenc目录下,而不是fdk-aac,如果我们不修改该测试文件的内容,只能暂且在"/mingw64/include"目录下创建该目录 -》
mkdir /mingw64/include/fdk-aac #fdk-aac的pc文件中头文件路径是/mingw64/include,所以在这里建目录
cp someplace/libAACenc/aacenc_lib.h /mingw64/include/fdk-aac
aacenc_lib.h文件中有内嵌include头文件,它们都在"libSYS/include"目录下,所以修改"pkgconfig/fdk-aac.pc"文件,另外指定头文件搜索目录:
x264部分
configure文件在链接某个测试文件时没有指定“-L”,也没有用到pkg-config里的头/库文件路径,却指定了“-lx264”,由于mingw64的DOS环境下库的自动搜索路径有点问题,所以在链接前需要指定x264头/库文件在哪里可以被找到 -》
cp /usr/local/include/x264* /mingw64/include/ #如果不修改configure文件,只好暂且把264头文件路径添加至mingw64下
export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/lib #之前x264被编译成静态库
执行FFMpeg
至此可以编译出win下ffmpeg可执行文件,但该版本依赖许多库,将该程序单独拿出来比较麻烦:
其中,libfontconfig-1.dll、zlib1.dll、libgcc_s_seh-1.dll、libintl-8.dll、libxml2-2.dll、libstdc++-6.dll、zlib1.dll、liblzma-5.dll必须是"/mingw64/bin/"目录下的动态库。
这样就可以单独使用ffmpeg:
Tips:
[Tip1]:ffmpeg较新版本:如4.2版本,如果在configure阶段没有指定--disable-asm、且汇编器为yasm,就会报错。根据ffbuild/config.log错误日志显示,是在测试yasm时语法错误,所以对于较新版本,我们使用nasm来编译ffmpeg。
[Tip2]:在ming264、msys2环境中通过pacman下载的cmake工具在编译x265时会遇到一些QT动态库找不到的问题,所以从官网上下载。
[Tip3]:
据上图所示,x265需要通过mercurial版本控制工具的hg命令下载,在msys2中的pacman仓库中有该软件的下载方式。
这里就不去下载该工具了,直接下载x265的压缩包。
[Tip4]:configure日志是ffbuild/config.log,可被用来分析配置时遇到的问题。