Windows下编译同时支持三种位深的x265可执行文件方法,附编译好的结果下载

先甩上下载地址,懒人福音:x265可执行文件


目前版本为2.5 stable,64位。VS 2017编译,同时支持8bit、10bit和12bit编码,开启了Yasm汇编和HDR10 Plus选项,Windows 10下测试正常。


Windows下编译同时支持三种位深的x265可执行文件方法,附编译好的结果下载


截止目前,MeGUI自带的还停留在2.2的一个修订版,还是GCC编译的。强迫症的我就去找新版的二进制文件,发现都是源码,无奈只能从官网下载了源码编译。


x265自带的Windows下使用Visual Studio的编译脚本,最高是VC12,也就是VS 2013,并不适用VS 2017。只能对照bat脚本,用CMake修改编译参数编译。


因为这里编译的是8bit、10bit和12bit都支持的程序,所以需要编译三次,前两次分别编译出10bit和12bit的静态库,第三次使用默认参数编译8bit程序,并链接前两次编译好的静态库。具体步骤如下:

  1. 先去x265的官方仓库下载源码。Windows下编译同时支持三种位深的x265可执行文件方法,附编译好的结果下载
  2. 然后去Yasm官网下载Yasm(还好不用编译Yasm,长舒一口气)。Yasm是可选项,但是毕竟这玩意儿是CPU杀手,还是用上汇编吧。Windows下编译同时支持三种位深的x265可执行文件方法,附编译好的结果下载
  3. 编译12bit静态库。在CMake GUI里,源码地址选择源码解压出的文件夹下source文件夹,参数注意修改几个部分:
    1. 开启HIGH_BIT_DEPTH。这个选项开启后,默认编译10bit的编码库,也可增进至12bit,总之是关掉了8bit编译。
    2. 关闭EXPORT_C_API、ENABLE_SHARED和ENABLE_CLI。
    3. 开启ENABLE_ASSEMBLY,修改YASM_EXECUTABLE值为之前下好的Yasm可执行文件。
    4. 执行Configure,会新出来几个参数,其中有个MAIN12,开启它,再次Configure。这个选项配合HIGH_BIT_DEPTH,即可编译12bit库。
    5. 生成VS解决方案,打开。在VS里生成方式改成Release,生成解决方案。
    至此,会在项目Release文件夹下拿到名为x265-static.lib的静态库,这是12bit的库,拷出来,改名为x265-static-main12.lib备用。
  4. 编译10bit静态库。回到CMake,再次修改参数。步骤与编译12bit基本一样,但是要不要勾选MAIN12,这样编译出来的是10bit的库,同样拷出来,改名为x265-static-main10.lib备用。
  5. 编译最终执行文件。回到CMake,要重新开启EXPORT_C_API、ENABLE_SHARED和ENABLE_CLI并关掉HIGH_BIT_DEPTH,嗯……简单粗暴的办法就是删掉生成的项目,删掉CMake Cache,重新Configure。注意开启ENABLE_ASSEMBLY,修改YASM_EXECUTABLE值为Yasm可执行文件。还有个选项貌似是2.4版本新增的,即ENABLE_HDR10_PLUS,我开启了它,但暂时还没有研究其用处。另外,修改EXTRA_LIB为x265-static-main10.lib;x265-static-main12.lib。这个参数找不到的话在CMake GUI里勾选Advanced就能看到。Configure,会发现多出一些选项,勾选LINKED_10BIT和LINKED_12BIT(不要勾选LINKED_8BIT),再次Configure,并生成解决方案。
  6. 打开VS,在cli项目属性里修改链接器配置,常规→附加库目录,添加之前存放那两个库的目录。以Release方式生成解决方案,就会拿到最终的x265.exe。


相比MeGUI自带的GCC 6.2编译的x265,使用VS编译的大小只有9.76M,仅为前者的63.5%。果然Windows下还是要用VS啊。