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,可被用来分析配置时遇到的问题。

posted @ 2020-05-04 19:43  一吃  阅读(2825)  评论(0编辑  收藏  举报