Windows使用MSYS2编译x265并集成进ffmpeg

准备工作

环境:

系统 win11 + msys2

x265: tag-3.5

ffmpeg:4.4.2

将下载好的源码拷贝到msys目录下(建议放到/home/username/下)。

Windows使用MSYS2编译x265并集成进ffmpeg_第1张图片

运行msys2.exe 检查msys2需要的工具是否都安装了,需要的工具如下(可用如下命令安装),使用pacman -Ss xxx 查询是否安装对应工具。

pacman -S nasm 
pacman -S yasm 
pacman -S make 
pacman -S diffutils  
pacman -S automake 
pacman -S autoconf 
pacman -S perl 
pacman -S libtool 
pacman -S mingw-w64-i686-cmake 
pacman -S mingw-w64-x86_64-cmake 
pacman -S pkg-config 
pacman -S mingw-w64-x86_64-gcc 
pacman -S mingw-w64-i686-toolchain
pacman -S mingw-w64-x86_64-SDL2 //如果需要编译出ffplayer的话,还需要安装SDL 

开始编译x265

运行mingw64.exe,打开类似命令行的窗口,mingw64.exe是编译64位库的工具,mingw32.exe是编译32位库的工具,编译的时候注意不要弄错。

进入x265目录,并进入./build/msys目录

Windows使用MSYS2编译x265并集成进ffmpeg_第2张图片

执行构建脚本 make-makefiles.sh

ps:这里需要说明一下,如果你是64位的系统并且运行的是mingw64.exe,直接运行make-makefiles.sh即可,如果你的设备是32位的,并且运行的是mingw32.exe来编译出64位的库,则需要运行make-x86_64-w64-mingw32-Makefiles.sh。

到这一步,少部分设备可以成功生成,大部分会遇到如下的错误:

Windows使用MSYS2编译x265并集成进ffmpeg_第3张图片

 这个原因的话,参考这篇博客(先别跟着操作),MSYS2环境下编译X265 的第四部分。

这边文章说是hg的问题,获取代码更新什么的没有获取到。那没有获取到我告诉他行不行?带着这样的思路查看了CMakeLists.txt里面报错位置,发现对应的报错是因为没有版本TAG信息

Windows使用MSYS2编译x265并集成进ffmpeg_第4张图片

 添加信息输出发现确实是空的,全局搜索一下,看看哪里给这个属性赋值的,这里省略过程,直接上结果。X265_LATEST_TAG在./x265/source/cmake/Version.cmake 中定义。

定义的初始默认值如上,后续的脚本内容应该就是检查版本更新之类的内容了。

直接在文件最后添加代码信息

Windows使用MSYS2编译x265并集成进ffmpeg_第5张图片

 这些信息是从./x265目录下的x265Version.txt取出的,(明明下载的是3.5的tag,为什么这里说是3.4,难道是我下载错了?不管了,就按这个设置吧)。

Windows使用MSYS2编译x265并集成进ffmpeg_第6张图片

 设置完成之后删除之前生成的文件(不删除的话后续编译可能会出错),再次执行构建脚本。结果如下:

Windows使用MSYS2编译x265并集成进ffmpeg_第7张图片

 又报错了?但是看输出是configure完成了,启动配置页面的时候因为找不到Qt6widgets.dll而终止了。

想了想除了安装目录,好像没啥需要配置的(至于为什么觉得没啥需要配置的,请查看之前交叉编译x265的博客,或者继续看下去,后面会说怎么开启配置),直接make吧。

编译成功后,修改./x265/build/msys/cmake_install.cmake文件,更改一下安装目录,

Windows使用MSYS2编译x265并集成进ffmpeg_第8张图片

然后make install,到输出目录查看产出

Windows使用MSYS2编译x265并集成进ffmpeg_第9张图片

 虽然是编出来了,但是有的人就是需要在页面上配置一下,但是又找不到设置在哪怎么办?

那就把报错找不到的Qt6widgets.dll的错误解决掉!这个是因为msys2没有安装qt6,导致cmake-gui无法运行。

 安装qt6即可解决,msys2.exe运行命令(笔者因为只装了64位没装32位,导致32位编译的时候报错,说找不到共享库,找不到的库为 ?(cmake-gui.exe: error while loading shared libraries: ?: cannot open shared object file: No such file or directory),解决这个问题花费一天时间,笑哭)

pacman -S mingw-w64-x86_64-qt6  //安装64位
pacman -S mingw-w64-i686-qt6  //安装32位

Windows使用MSYS2编译x265并集成进ffmpeg_第10张图片

有点大,全装的话要1.5G(笔者因为硬盘空间问题,只安装了base,只有四百多兆)。

安装完成之后,再次执行make-Makefiles.sh脚本,就可以看到配置界面了。

Windows使用MSYS2编译x265并集成进ffmpeg_第11张图片

按自己需求配置好之后configure + generate,接着就make&&make install吧。

虽然库是编完了,但是集成进ffmpeg需要x265.lib文件,产出里面并么有,需要Visual Studio的lib.exe工具根据./x265/build/msys下的x265.def生成。

vs没有的话去下载安装一个吧,到vs的安装目录下搜索lib.exe,根据目录区分是32位还是64位的。

给个参考资料:利用vs2017中的lib.exe把def文件生成lib文件

Windows使用MSYS2编译x265并集成进ffmpeg_第12张图片

生成libx265.lib后,64位的x265编译就完成了 。

ps:执行32位的时候,一定要把./265/build/msys下之前编64位产生的make文件都删除掉。要用32位的lib.exe生成32位的libx265.lib。

将x265编进ffmpeg

为了编ffmpeg集成少写几级目录,我将x265的产出移动到了/home/userName下了。

运行mingw64.exe进入ffmpeg目录,先执行(以64位为例,32位将路径里面的x64改成x86):

export PKG_CONFIG_PATH=/home/selivert-/out/x64/lib/pkgconfig 

再执行

./configure --enable-shared --enable-static --arch=x86_64 --enable-postproc --enable-gpl --enable-libx265 --prefix=e:/ffmpeg --extra-cflags=-I/home/selivert-/out/x64/include --extra-ldflags=-L/home/selivert-/out/x64/lib --pkg-config="pkg-config --static"

configure完成之后,执行make && make install

执行完成之后到输出目录中查看,发现bin目录下生成了我们需要的*.lib和*.dll文件。

Windows使用MSYS2编译x265并集成进ffmpeg_第13张图片

 接下来再编译32位的,之后就把这些个文件用到你的工程中吧!ps:别忘了把libx265.dll也拷到工程里。

你可能感兴趣的:(windows,视频编解码)