目前遇到过两次需求,需要编译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++\msys2\etc\pacman.d,到pacman.d的文件夹下,可能你的文件数量和我的截图数量不一样,但不重要,看下图这三个文件
打开配置文件,把Primary下面的部分注释掉,换上新的源(只换Primary的那部分即可)
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
先更新msys2的秘钥(这一步是防止在下载软件包的时候报错)
pacman -S msys2-keyring
使用命令,更新升级软件
pacman -Syu
所有操作y即可,更新可能需要一段时间。输入最后一个y可能端口会退出,重新打开即可
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命令行的格式)
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
这里会卡住好一会,耐心等待命令行提示,只要不报error就没事(这里我等了20分钟,测试发现不同电脑的速度不同,快的话大概10分钟就可以了)
最后进行编译和安装
make -j8 && make install
-j8好像是指cpu的核数,这里不加也行,即可以直接make && make install,这里短则10分钟,长则一小时都有可能
编译结束后会对编译的库和文件进行检查,若未出现明显的ERROR字样,则编译成功
出现类似这样的话则失败了
7.编译好后,在msys2安装目录\usr\local\ffmpeg下有对应的动态库和静态库文件
此时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中的一些库)
测试一下ffmpeg的版本
码字不易,如果这篇博客对你有帮助,麻烦点赞收藏,非常感谢!有不对的地方