环境:
系统 win11 + msys2
x265: tag-3.5
ffmpeg:4.4.2
将下载好的源码拷贝到msys目录下(建议放到/home/username/下)。
运行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
运行mingw64.exe,打开类似命令行的窗口,mingw64.exe是编译64位库的工具,mingw32.exe是编译32位库的工具,编译的时候注意不要弄错。
进入x265目录,并进入./build/msys目录
执行构建脚本 make-makefiles.sh
ps:这里需要说明一下,如果你是64位的系统并且运行的是mingw64.exe,直接运行make-makefiles.sh即可,如果你的设备是32位的,并且运行的是mingw32.exe来编译出64位的库,则需要运行make-x86_64-w64-mingw32-Makefiles.sh。
到这一步,少部分设备可以成功生成,大部分会遇到如下的错误:
这个原因的话,参考这篇博客(先别跟着操作),MSYS2环境下编译X265 的第四部分。
这边文章说是hg的问题,获取代码更新什么的没有获取到。那没有获取到我告诉他行不行?带着这样的思路查看了CMakeLists.txt里面报错位置,发现对应的报错是因为没有版本TAG信息
添加信息输出发现确实是空的,全局搜索一下,看看哪里给这个属性赋值的,这里省略过程,直接上结果。X265_LATEST_TAG在./x265/source/cmake/Version.cmake 中定义。
定义的初始默认值如上,后续的脚本内容应该就是检查版本更新之类的内容了。
直接在文件最后添加代码信息
这些信息是从./x265目录下的x265Version.txt取出的,(明明下载的是3.5的tag,为什么这里说是3.4,难道是我下载错了?不管了,就按这个设置吧)。
设置完成之后删除之前生成的文件(不删除的话后续编译可能会出错),再次执行构建脚本。结果如下:
又报错了?但是看输出是configure完成了,启动配置页面的时候因为找不到Qt6widgets.dll而终止了。
想了想除了安装目录,好像没啥需要配置的(至于为什么觉得没啥需要配置的,请查看之前交叉编译x265的博客,或者继续看下去,后面会说怎么开启配置),直接make吧。
编译成功后,修改./x265/build/msys/cmake_install.cmake文件,更改一下安装目录,
然后make install,到输出目录查看产出
虽然是编出来了,但是有的人就是需要在页面上配置一下,但是又找不到设置在哪怎么办?
那就把报错找不到的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位
有点大,全装的话要1.5G(笔者因为硬盘空间问题,只安装了base,只有四百多兆)。
安装完成之后,再次执行make-Makefiles.sh脚本,就可以看到配置界面了。
按自己需求配置好之后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文件
生成libx265.lib后,64位的x265编译就完成了 。
ps:执行32位的时候,一定要把./265/build/msys下之前编64位产生的make文件都删除掉。要用32位的lib.exe生成32位的libx265.lib。
为了编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文件。
接下来再编译32位的,之后就把这些个文件用到你的工程中吧!ps:别忘了把libx265.dll也拷到工程里。