windows下使用msys2编译FFmpeg源码

本文详细介绍了如何在Windows环境下,特别是使用msys2工具解决FFmpeg源码编译问题,包括安装msys2、配置环境、安装必要的依赖和编译步骤,以实现自定义功能和库的生成。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、前言
    对于音视频相关行业的开发者来讲,很多时候需要自己手动编译FFmpeg的源码。虽然FFmpeg的官网中已经提供编译好了的可执行文件(ffmpeg.exe),但是该可执行文件往往是不包含某些功能的(比如字幕功能drawtext,一个具体的例子为https://blog.youkuaiyun.com/u014552102/article/details/104442111),要想开启这些特殊功能,我们得手动编译FFmpeg源码,从而实现其功能定制。网上很多教程是使用mingw或者mingw加上msys编译FFmpeg的,但是mingw可能会存在安装过程中无法下载导致安装不成功的问题。本文讲述使用msys2编译ffmpeg源码的方法,使用该方法不需要安装mingw。msys2是一个在windows上模拟linux环境的软件,在msys2上可以使用大多数的shell命令,它可以在一定程度上代替虚拟机,让用户可以在windows上使用shell。

二、下载安装msys2
首先我们在http://msys2.github.io/ 下载msys2。进入该网址后,可以看到如下页面:

这里由于博主的电脑是win10、64位操作系统,所以选择msys2-x86_64-20190524.exe。下载下来后双击安装。这里博主安装到D盘,因为我们安装完msys2后是要在里面安装其它的软件的,随着里面安装的软件越来越多,msys2在电脑中占用的空间会越来越大,所以不推荐安装在C盘(系统盘)。

安装过程中,我们可能会发现,进度会一直卡在中间,无法继续执行,然后“隐藏详细信息”这里显示“Updating trust database”,如下图所示。当遇到这个问题时,我们只要点击右下方的“取消”按钮,然后重新安装即可。

安装完成后,我们进入安装目录,打开msys2_shell.cmd

在弹出的窗口上右击, 选择Options,按照如下设置更改字符集,如下图所示,否则可能会出现中文乱码的问题。更改完成后,点击“Save按钮”,这里要注意更改完成后得要重新启动msys2_shell.cmd,设置才能生效。

三、在msys2中安装软件
重启msys2_shell.cmd后,我们在弹出的窗口中执行命令:

pacman -S make yasm diffutils pkg-config


然后可能会出现错误如下图所示:“错误:无法从 XXX: Operation too slow. Less than 1 bytes/sec......”

遇到这种情况,我们只要按照博文《MSYS2 更新源》或者《MSYS2更换国内源》里面写的那样,更新一下源,再重新执行上述安装软件的命令,就可以了。

然后我们执行下面的命令查看安装了哪些gcc:

pacman -Sl | grep "gcc"

可以看到mingw-w64-i686-gcc和mingw-w64-x86_64-gcc没有安装。

如果没安装,我们就执行下面的命令安装:

pacman -S mingw-w64-i686-gcc 
pacman -S mingw-w64-x86_64-gcc 


如果还是报错:“错误:无法从 XXX: Operation too slow. Less than 1 bytes/sec......”,我们只要再重新执行上述命令安装就可以了。在每一次重新安装gcc的过程中,下图所示的“下载大小”的值都会变小,所以我们在安装gcc失败后,多次重复安装,让“下载大小”的值越来越小,最终我们就能成功安装的。
安装完gcc后,我们再次执行命令:pacman -Sl | grep "gcc",可以看到mingw-w64-i686-gcc和mingw-w64-x86_64-gcc都安装了。

四、下载FFmpeg源码
我们进入FFmpeg官网http://ffmpeg.org/download.html#releases,下载最新版本的FFmpeg源码(FFmpeg4.2.2)。

在msys2的安装目录下新建一个文件夹“SourceCode”,将下载下来的FFmpeg源码解压,放到该文件夹下,如下图所示:

五、编译FFmpeg源码(编译出32位库或64位)

为了在 msys2 命令行使用 vs2019 的环境变量,需要做以下操作:

MSYS2 环境继承vs2019 的环境变量 操作教程:

1,修改 C:\msys64\msys2_shell.cmd 中的 rem set MSYS2_PATH_TYPE=inherit,去掉rem,取消这⼀句的注释。使MSYS2的环境变量继承当前CMD的窗口的环境变量。
————————————————
版权声明:本文为优快云博主「Loken2020」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/u012117034/article/details/123131135


通过命令提示符进入msys2的安装目录即msys64下, 执行命令

msys2_shell.cmd -mingw32


在启动的窗口中执行命令:cd /SourceCode/ffmpeg-4.2.2,进入msys2中ffmpeg源码的目录,如下图所示:

可以看到ffmpeg-4.2.2的目录下有一个configure文件,执行configure命令生成Makefile:

 ./configure --toolchain=msvc --enable-shared --enable-decoder=h264 --enable-parser=h264 --arch=x86_32 --prefix=/usr/local/ffmpeg

然后按顺序执行

make

make install

执行完后会在msys64/usr/local目录下生成ffmpeg目录,生成的库和可执行文件就在msys64/usr/local/ffmpeg/bin目录下,如下图所示:

由于用msys2生成的库有依赖,比如生成的32位库依赖于msys64\mingw32\bin下的dll库,所以我们将msys64\mingw32\bin下的所有dll都拷贝到msys64\usr\local\ffmpeg\bin下。这样我们就能使用生成的ffmpeg.exe和库了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值