2、编译 x264
x264 库的编译还是比较简单的,与 SDL 一样我们也要先获取其源码,可以通过下面的命令获取 x264 源码:
git clone https://code.videolan.org/videolan/x264.git
可以到这里自取 x264 源码
链接:https://pan.baidu.com/s/17HyuJBrka04DXoS4WOa3tQ
提取码:oqrb
源码获取到后,可以直接在 MSYS2 环境下编译出 Windows 下可用的动态库,具体步骤如下:
# 通过VS X64 Native... 窗口打开MSYS2 cd D:\msys64 msys2_shell.cmd cd /d/Git-Space/x264/ # 在MSYS2中进入x264源码目录 pacman -S automake autoconf libtool # 安装生成Makefile的工具 CC=cl ./configure --prefix=/usr/local/x264 --enable-shared --disable-asm make -j 4 && make install
通过上面的命令就可以将 x264 编译出来了。x264 编译好后,其输出的目录结构与 ffmepg 是一样的,在 /usr/local/x264 中包括了 include、lib、bin 等目录。
要特别强调的一点是,我们需要将 lib 目录下的 libx264.dll.lib 文件名修改为 libx264.lib,否则 ffmpeg 编译时会报 “无法找到该库” 的错误。
3、编译 fdk-aac
fdk-aac 的编译与 SDL 类似,它同样要使用 CMake 生成 VS 工程文件,之后再通过 VS 编译该库。
首先,通下面的的命令获取 fdk-aac 源码:
git clone https://github.com/mstorsjo/fdk-aac.git
可以到这里自取 fdk-aac 源码:
链接:https://pan.baidu.com/s/1ViuYEtEFFh71w9ZRgLaesA
提取码:hwf5
之后打开 CMake-GUI,在 CMake-GUI 中指定 SDL 源码所在路径(D:/Git-Space/fdk-aac)以及编译后的输出路径(D:/CMake/usr/local/fdk-aac)
随后执行
Configure -> Generate -> Open Project
生成 VS 工程。有了 VS 工程,我们就可以通过 VS2022 来编译 FDK-AAC 了。
分别在 Release 和 Debug 模式下,重新生成一下 All_BUILD 子项目。
没啥问题的话 FDK-AAC 就编译好了,你可以去 D:\CMake\usr\local\fdk-aac\Debug 和 D:\CMake\usr\local\fdk-aac\Release 目录下看看有没有对应的 lib 文件
D:\CMake\usr\local\sdl\Debug 目录如下:
D:\CMake\usr\local\fdk-aac\Release 目录如下:
为了满足要求,我们需要在指定输出目录下创建 lib 目录,并将 fdk-aac.lib 和 fdk-aac.dll 文件拷贝到 lib 目录下。同时在 lib 目录下创建 pkgconfig 目录,将 fdk-aac.pc 文件拷贝到该目录中。
但是这里发现一个问题,就是目录下没有 include 目录
为了解决这个问题,我又用 MSYS2+mingw 的方式重新编译了一遍 fdk-aac,这种方式是可以生成 include 头文件的
①、打开 MSYS2 MINGW64
②、在 fdk-aac 目录下执行如下命令
pacman -S mingw-w64-x86_64-gcc ./autogen.sh ./configure --prefix=/usr/local/fdk-aac --enable-shared make -j4 make install
然后将生成的头文件手动拷贝到了 /usr/local/fdk-aac 目录下即可。
最终完整的目录结构如下所示:
/usr/local/fdk-aac |------------ lib | |-- fdk-aac.lib | |-- fdk-aac.dll | |-- pkgconfig | |----- fdk-aac.pc |------------ include
此外,我们还要修改 fdk-aac.pc 中的内容,将其中的库路径修改为指定的输出路径
八、FFmpeg 使用上述编译好的库
首先,我们要设置环境变量 PKG_CONFIG_PATH,通过它告诉 FFmpeg 上述几个库从哪儿可以找到,具体的设置方法如下:
在 MSYS2 窗口中打开 .bashrc
pacman -S vim vim ~/.bashrc
在 ~/.bashrc 中设置环境变量
export PKG_CONFIG_PATH=/d/CMake/usr/local/sdl/lib/pkgconfig:/usr/local/x264/lib/pkgconfig:/d/CMake/usr/local/fdk-aac/lib/pkgconfig:$PKG_CONFIG_PATH :wq #保存并退出vim
让环境变是生效
source ~/.bashrc
接下来,重新生成 FFmpeg 的 Makefile 文件,并重新编译
首先进入到 ffmpeg 源码目录,执行下列命令
./configure --prefix=/usr/local/ffmpeg --arch=x86_64 --enable-shared --disable-ffprobe --disable-doc --enable-x264 --enable-gpl --enable-fdk-aac --enable-nonfree --toolchain=msvc make clean make -j 4 && make install
最后,将 sdl 的 dll、x264 的 dll 以及 fdk-aac 的 dll 拷贝到 ffmpeg 的 bin 目录下,这样就可以正确的执行 ffmpeg.exe 或 ffplay.exe 命令了。
进入 ffmpeg/bin 目录下,执行以下命令,如果能够输出版本信息,则说明正常
./ffmpeg.exe -version