Windows10 使用MSYS2和VS2019编译FFmpeg源代码-测试通过

说明

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.cmdrem 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:如果觉得本文帮助了你,希望能帮我点一个小小的赞,您的支持是我最大的动力!

  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
使用MSYS2和VS2015编译FFmpeg,你可以按照以下步骤进行操作: 1. 首先,你需要下载并安装MSYS2。你可以从官方网站https://www.msys2.org/下载MSYS2安装程序。 2. 安装完成后,打开MSYS2的命令行界面,并运行以下命令来安装必要的工具:pacman -S make gcc diffutils 3. 为了避免和MSVC的link.exe程序冲突,你需要将C:\msys64\usr\bin\link.exe重命名为C:\msys64\usr\bin\link_orig.exe。 4. 下载YASM(The Yasm Modular Assembler),你可以从官方网站https://www.tortall.net/projects/yasm/wiki/Download下载YASM。将下载的yasm--win64.exe重命名为yasm.exe,并将其拷贝至MSYS2的安装目录(比如C:\msys64)。 5. 现在你可以下载FFmpeg源代码。你可以从官方GitHub仓库https://github.com/FFmpeg/FFmpeg下载FFmpeg的源码。 6. 打开MSYS2的命令行界面,并切换到FFmpeg源码所在的目录。 7. 运行以下命令来配置FFmpeg编译选项:./configure --toolchain=msvc --arch=x86_64 --enable-yasm --enable-asm --enable-shared --disable-static 8. 配置完成后,你可以运行make命令来开始编译FFmpeg。请注意,编译过程可能会比较耗时,请耐心等待。 9. 编译完成后,你可以使用编译好的库来进行你的项目开发。 总结一下,使用MSYS2和VS2015编译FFmpeg的步骤包括安装MSYS2、安装必要的工具、重命名link.exe、下载YASM、下载FFmpeg源码、配置编译选项、运行make命令进行编译。希望以上信息对你有帮助。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [使用msys64+vs2019编译ffmpeg](https://download.csdn.net/download/ihmhm12345/13116875)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [使用MSYS2 + VS2022编译FFmpeg](https://blog.csdn.net/powang2011/article/details/122724685)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值