说明
FFmpeg作为一个流媒体的整体解决方案,在很多项目中都使用了它,如果我们也需要使用FFmpeg进行开发,很多时候我们需要将源码编译成动态库或者静态库,然后将库放入到我们的项目中,这样我们就能在我们的项目中使用FFmpeg提供的接口进行开发。关于FFmpeg的介绍这里就不过多说明。
首先想完成的任务时在win10下,从github下编译最新的FFmpeg代码(5.0版本),同时将FFmpeg编译成64位的动态库(同时包含dll和lib)。如果需要编译成64位的静态库,我在后面也会简单的提及下,很简单。
FFmpeg是在linux下使用C语言进行开发的,在linux下编译相对于来说就比较简单,但是window下编译FFmpeg就显得有点麻烦,网上也有很多博客说明如何配置,但是在按照很多博客里的介绍一步一步操作之后,还是遇到了很多错误,或者编译后不版本不符合要求,比如这篇博客里编译的FFmpeg是32位的WINDOWS编译FFMPEG4.3 搭建VS2019开发环境,但是现在很多时候我们需要64位的版本的库,如果我们编译成32位的库,如果我们的应用程序是64位,就会报link错误。,当然本篇博客基本上参考了该篇博客的过程,如果通过我这里的博客无法解决你的问题,可以参考这篇博客。
实验过程
工具
1.vs2019
2,NASM工具(可以通过MSYS2命令下载,不过最好手动安装,防止一些错误方式)
3.MSYS2工具
具体过程
1.安装Visual Studio 2019
如果安装的VS版本低于2019,理应上也是可以的,不过我没有具体测试,小伙伴可以自己尝试
2. 安装NASM工具
2.1去NASM官网下载,如图点击下载win64位的
2.2 安装NASM
安装步骤就是下一步下一步,没有什么注意的。
3.操作MSYS2工具
3.1去MSYS2官网下载MSYS2工具(我的安装目录为D:\msys)
安装完后,如下图所示
如果对linux熟悉的同学,上图有没有很熟悉,文件结构就是类似linux的文件结构,的确,我们使用msys工具的时候,cd命令跟linux很相像。
3.2 访问windows PATH环境变量
使用任何编辑器打开: D:\msys\msys2_shell.cmd 将 rem set MSYS2_PATH_TYPE=inherit 修改为 set MSYS2_PATH_TYPE=inherit
3.3使用everyting工具搜索vcvarsall.bat(需要安装VS2019)处理工具的具体位置,比如我的位置在:D:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvarsall.bat
在msys2_shell.cmd文件的开始处添加一行内容如下:
3.4 使用VS2019命令行加载MSYS2(使用管理员模式,否则后面有一个步骤会报错,当然忘记了可以重新使用管理员模式重新加载MSYS2)
在开始菜单中打开VS2019文件夹,点击 x64 native tools command…
进入到msys所在目录,以64位方式运行msys2_shell.cmd :
msys2_shell.cmd -mingw64
即可顺利启动MSYS2
3.5 安装MSYS2编译FFMPEG所需的依赖
依次安装以下工具(安装的过程中可能出错,可能原因是没有安装最新的MSYS2工具,比如会提示key过期等,我在安装的过程中遇到了很多问题,但是忘记记录下来了。这个需要朋友自己去网上查找资料了)
pacman -S nasm #汇编工具 pacman -S yasm #汇编工具 pacman -S make cmake #常规编译工具 pacman -S diffutils # 比较工具,ffmpeg configure 生成makefile时用到 pacman -S pkg-config # 库配置工具,编译支持x264和x265会用到 pacman -S git # 从版本库下载源码
3.6 测试
在VS2019命令行输入cmkae,可以正确执行即代表msys2配置成功
4 安装FFmpeg依赖包
注意:编译的过程比较耗时,需要耐心等待
由于FFmpeg依赖了第三方包,主要是x264,x265,fdc-acc,如果需要这3个库的相关功能,需要先编译这3个库,如果不需要,可以在后面编译的时候说明不需要这3个包即可,在后面会说明
4.1 依赖包和FFmpge源代码准备
网盘地址:依赖包和ffmpeg代码,当然如果想获取最新源代码,可以去官网去取。
网盘密码:wv15
当然,这些依赖包在前面提及的依赖包在文章最后。在我网盘也有编译好的64位和提供的32位版本(从前面的博客中提取的)
4.2 创建源码目录和解码源码
创建/home/source目录,用于存放源码 D:\msys\home\source
4.3 msys编译X264
–enable-shared:编译成动态库(建议) –enable-static:编译成静态库 cd /home/source/x264/ CC=cl ./configure --enable-shared Make -j4 Make install
安装完成后的动态库dll和lib在D:\msys\usr\local中
4.4 使用VS2019命令行编译fdk-acc
cd d:\msys\home\source\fdk-aac-master nmake -f Makefile.vc nmake -f Makefile.vc prefix=.\install install
由于我已经编译过fdk-acc,所以这里不是我第一次编译的结果,编译后的结果在D:\msys\home\source\fdk-aac-master\install
4.5 使用VS2019的cmake在msys2中编译x265
4.5.1 查询VS2019 cmake路径
Whereis cmake
4.5.2编辑文件 D:\msys\home\source\x265\build\msys-cl\make-Makefiles-64bit.sh
这个文件要修改2个地方:
第一个地方是将上图的第一出该位x64(这里是VS2019的x64位),这里必须要改,否则vs的cmake编译不过
如下图所示
第二处是根据cmake的位置将
cmake -G "NMake Makefiles" -DCMAKE_CXX_FLAGS="-DWIN32 -D_WINDOWS -W4 -GR -EHsc" -DCMAKE_C_FLAGS="-DWIN32 -D_WINDOWS -W4" ../../source
改为
/d/"Program Files (x86)/Microsoft Visual Studio/2019"/Enterprise/Common7/IDE/CommonExtensions/Microsoft/CMake/CMake/bin/cmake.exe -G "NMake Makefiles" -DCMAKE_CXX_FLAGS="-DWIN32 -D_WINDOWS -W4 -GR -EHsc" -DCMAKE_C_FLAGS="-DWIN32 -D_WINDOWS -W4" ../../source
注意你的cmake位置
使用msys2 进入目录,执行以下3个命令
cd /home/source/x265/build/msys-cl/ ./make-Makefiles-64bit.sh Nmake install
执行nmake install 如果出现权限错误(前文已经提到,是没有管理员权限所致,注意这里的图片不是我自己的图片,是其他博客的)
执行namake install之后可见x265被编译至 C:/Program Files (x86)/x265/目录
我们需要将其复制至msys2的 /usr/local/目录
4.6 准备编译好的文件
4.6.1 拷贝x265文件
将4.5步里得到C:\Program Files (x86)\x265文件里面的bin、include、lib拷贝到msys的/usr/local目录中
4.6.2 拷贝fdk-aac文件
将4.4步骤生成的fdk-aac相关的库和头文件(D:\msys\home\source\fdk-aac-master\install)拷贝到msys的/usr/local目录中
将 D:\msys\home\source\fdk-aac-master\fdk-aac.pc.in 复制至 D:\msys\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.6.3 修改lib和文件内容
进入目录 D:\msys\usr\local\lib,将 libx264.dll.lib 重命名为 libx264.lib
4.6.3 检查文件和修改文件名(重要步骤,否则后面很容易报错,请仔细检查,我可能已经将有的库和文件名已经修改了,希望你们和我当前的目录文件和名称一致!)
(1)文件结构
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}
x264.pc内容
prefix=/usr/local exec_prefix=${prefix} libdir=${exec_prefix}/lib includedir=${prefix}/include Name: x264 Description: H.264 (MPEG4 AVC) encoder library Version: 0.159.2991M Libs: -L${exec_prefix}/lib -llibx264 Libs.private: Cflags: -I${prefix}/include -DX264_API_IMPORTS
x265.pc内容
prefix=/usr/local exec_prefix=${prefix} libdir=${exec_prefix}/lib includedir=${prefix}/include Name: x265 Description: H.265/HEVC video encoder Version: 0.0 Libs: -L${libdir} -llibx265 Libs.private: Cflags: -I${includedir}
将D:\msys\usr\local\lib\pkgconfig 的上面3个文件复制至 D:\msys\mingw64\lib ,如下图所示
具体是拷贝到lib文件下,还是里面有一个pkconfig目录,我也不是很确定,如果你们也不确定,可以按我这样做,由于时间原因,我没有在测试一次了。
5 编译ffmpeg
5.1 进入到ffmpeg目录
cd /home/source/FFmpeg-master/
如果遇到报错,学会看日志,如下
5.2 使用VS2019编译器配置FFMPEG
时间比较长,需要有耐心
CC=cl.exe ./configure --prefix=./install --toolchain=msvc --arch=x64 --enable-shared --disable-programs --disable-ffplay --disable-ffmpeg --disable-ffprobe --enable-libx264 --enable-gpl --enable-libfdk-aac --enable-nonfree --enable-libx265
其中想要什么模块就–enable, 不需要就disable,如果发现像我上图的错误,看看日志一般就可以知道是什么问题。
5.3 编译FFMPEG
时间很长,慢慢等着吧。。。。。。。。
Make -j4
5.4 安装FFMPEG
Make install
6.验证
请参考我的参考文档,这里就不细说了。
总结
总体来说,在windows下编译FFmpeg是不方便的,但是黄天不负有心人,只要你愿意花时间去琢磨,相信自己总会解决的。
编译出现问题,需要冷静去的查询资料和看编译的日志输入.
如果在编译的过程中,出现什么问题,给我留言。
PS:如果觉得本文帮助了你,希望能帮我点一个小小的赞,您的支持是我最大的动力!