您现在的位置是:首页 >其他 >windows下msys2编译64位的ffmpeg源码网站首页其他

windows下msys2编译64位的ffmpeg源码

小土同学! 2023-07-22 10:42:17
简介windows下msys2编译64位的ffmpeg源码

目前遇到过两次需求,需要编译ffmpeg源码。网上下载的编译好的源码里面可能不全,很多时候需要自行编译源码。本文介绍自行编译ffmpeg64位源码(32位通过相似的方式为编译成功,不知道原因)


环境:

  • 2023.5.4下载的最新版msys2
  • ffmpeg 4.3.2源码
  • windows操作系统

首先需要msys2软件和ffmpeg源码

链接:https://pan.baidu.com/s/1j9121MdJQVkkkET_KPPH-g?pwd=8fr6
提取码:8fr6
–来自百度网盘超级会员V4的分享

其中包含我已编译好的库


1.下载msys2(该软件用于在windows上模拟linux环境)

2.更新msys2下载源

找到msys2的安装目录,默认安装名是msys64,这里我因为自己的需要改成了msys2,以我的路径为例D:1c++msys2etcpacman.d,到pacman.d的文件夹下,可能你的文件数量和我的截图数量不一样,但不重要,看下图这三个文件

image-20230505092151608

打开配置文件,把Primary下面的部分注释掉,换上新的源(只换Primary的那部分即可)

image-20230505092003334

mirrorlist.mingw64 文件(因为是编译64位的ffmpeg源码,所以本质上只需更新该文件即可, mirrorlist.mingw32 和mirrorlist.msys可不更新),这里我是放了两个下载源,清华大学的下载源失效了就用第二个下载源,谁在前,就默认使用哪个下载源

## 清华大学
Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/x86_64
## 中科大
Server = http://mirrors.ustc.edu.cn/msys2/mingw/x86_64

3.打开mingw64.exe

image-20230504145135490

先更新msys2的秘钥(这一步是防止在下载软件包的时候报错)

pacman -S msys2-keyring

使用命令,更新升级软件

pacman -Syu

所有操作y即可,更新可能需要一段时间。输入最后一个y可能端口会退出,重新打开即可

image-20230504145924992

4.通过以下命令,逐个安装(如果-S提示出错,就用-Sy安装,即尝试pacman -Sy mingw-w64-x86_64-toolchain)

# 编译工具链
pacman -S mingw-w64-x86_64-toolchain
 
pacman -S mingw-w64-x86_64-yasm
 
pacman -S mingw-w64-x86_64-SDL2
 
pacman -S mingw-w64-x86_64-fdk-aac
 
pacman -S mingw-w64-x86_64-x264
 
pacman -S mingw-w64-x86_64-x265
 
# 需要单独安装make
pacman -S make

我安装的软件包是比较多的,但也比较全,读者可根据自己的需求去选择。这里的安装,尤其是toolchain和x264的安装如果报错,则重新从步骤3更新msys2的秘钥(我在装的过程中,x264出现小的报错,但并未影响。)

5.在mingw中进入源码目录下,注意路径中的斜杠(这里的命令都应是linux命令行的格式)

image-20230504153131374

image-20230504153209801

6.用一下命令开始编译,编译后的库放在了msys2的安装目录的/usr/local/ffmpeg目录下(我这里选择编译的库较多,但比较全。读者可自行选择)

./configure --prefix=/usr/local/ffmpeg --enable-shared --disable-static --enable-gpl  --enable-nonfree --enable-libfdk-aac --enable-libx264 --enable-libx265

image-20230504153539260

这里会卡住好一会,耐心等待命令行提示,只要不报error就没事(这里我等了20分钟,测试发现不同电脑的速度不同,快的话大概10分钟就可以了)

最后进行编译和安装

make -j8 && make install

-j8好像是指cpu的核数,这里不加也行,即可以直接make && make install,这里短则10分钟,长则一小时都有可能

编译结束后会对编译的库和文件进行检查,若未出现明显的ERROR字样,则编译成功

image-20230505092324510

image-20230505093347582

出现类似这样的话则失败了

image-20230505092432532

7.编译好后,在msys2安装目录usrlocalffmpeg下有对应的动态库和静态库文件

image-20230505092748023

此时bin目录中的ffmpeg、ffprobe、ffplay还是没法使用的,因为缺少相关的dll,需要从MSYS2安装目录/mingw64/bin中拷贝,或者将MSYS2安装目录/mingw64/bin配置到环境变量Path中。

需要拷贝的dll有:libwinpthread-1、SDL2、zlib1.dll、liblzma-5、libbz2-1、libiconv-2、libgcc_s_seh-1、libstdc+±6、libx265、libx264-159、libfdk-aac-2。

因为拷贝起来比较麻烦,所以我打算在环境变量里配置一下(环境变量第一条是自行编译的库的bin目录,第二条是mingw64/bin中的一些库)

image-20230505094312041

测试一下ffmpeg的版本

image-20230505094213672


码字不易,如果这篇博客对你有帮助,麻烦点赞收藏,非常感谢!有不对的地方

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。