【X265】Win10环境编译x264 / x265,调用libx264 / libx265

最近开始阅读x264、x265源码,并计划学习一些基于FFmpeg的视频编码开发流程,首先熟悉一遍对于x264、x265 源码编译及libx264.lib、libx265.lib的库调用流程。

准备

系统环境: Win10 + VS2019
编译环境: Mingw64 + msys2 + cmake + yasm + nasm

注意: Mingw64、 msys2 最好直接装在C盘根目录下,并加入环境变量,路径中不能出现中文或空格(如 Program Files),否则 gcc 编译过程中可能会报错。yasm 直接放到Mingw64 的 bin 文件夹中即可。

【Mingw64】 配置可如下选择

Mingw64配置
【msys2】

  • 在安装好的msys64文件夹中,编辑 msys2_shell.cmd ,删去rem set MSYS2_PATH_TYPE=inherit中的rem,即可在运行msys2时访问 windows 环境变量,方便使用装好的 Mingw64 进行编译。

  • 安装成功后,打开 MSYS2 MinGW 64bit,运行 gcc -v, 显示如下,即证明正确安装了 msys2和 Mingw64,可以开始后续编译过程。
    gcc-v

X264编译

x264源码获取

  1. 将获取的源码拷到msys2中;
  2. 在msys2的命令行中输入./configure获取编译选项,如下图所示,具体各选项含义见链接:x264 编译选项详细说明

x264 configure选项

./configure  --enable-static --enable-shared --enable-debug --prefix=/home/x264/
make
make install
  • --prefix==/home/x264为生成的lib、dll文件地址,可更改
  • 本人在编译过程中遇到多种小问题,多与路径有关,在将 Mingw64 和 msys2 都装在C盘根目录下后基本解决,具体在 configure 或 make 阶段遇到的报错可查看x264-master/config.log文件,有详细说明错误原因。

x264编译成功

  1. 编译完成后 x264文件夹中包含bin、include、lib三个文件夹;

生成的x264文件夹

  • bin文件夹中包含 x264.exelibx264-161.dll 动态库链接,将此目录加入环境变量,直接调用 x264.exe 进行视频编码。
  • 需要注意的是,x264 直接编译完成后,是不会生成.lib文件的,其静态库文件为lib\libx264.a,无法直接在 VS2019 中调用。
    为了生成libx264.lib,需要利用 pexportsVS2019,将libx264-161.dll转换为.def文件,再转换为libx264.lib,具体操作可见:libx264.lib生成方法
pexports libx264-157.dll > libx264-157.def
LIB /machine:X64 /DEF:libx264-157.def 

X265编译

x265源码获取

在Win10环境下,对于 x265 的编译过程要相对 x264 温和许多,直接使用 cmake-gui 即可实现编译过程。

  1. 解压 x265 源码文件(x265的编译过程无需用到 msys2,因此解压文件夹不用放在 msys2 中),解压出来的文件夹包含 build、doc、source 三个子文件夹;
  2. 打开cmake-gui,分别在 source 和 build 处选择 x265_3.3/source 以及 x265/build (自选地址),然后点击 configure,在选择 generator 时选择VS2019(自选VS版本),其余默认,选择 Finish ,会在方框5中开始运行;

x265编译

  1. 在弹出的编译选项中,勾选需要选择的配置,然后分别点击 configure、generate,最终即在选择的build文件夹中生成 x265.sln 工程;

x265编译选项

  • x265在运行时有 profile 参数选项,选择输出 HEVC 比特流的位深度,也是编码器内部的位深度,并根据此选项为编码器绑定API,具体绑定方法如下:如果所要求的位深度与所连接的libx265位深度不一样,它就会尝试去为8位编码器绑定libx265_main,为10位编码器绑定libx265_main10,为12位编码器绑定libx265_main12,使用与连接的libx265版本相同的API;
  • 因此,如果工作需用到 10bit 编码器,即需在 CMake 中勾选 HIGH_BIT_DEPTH 并重新 configure;同时,重新configure后,配置界面会出现 Main12 选项,如果需要 12bit 编码器,则还需勾选此选项并再次重新 configure。
  1. 打开x265工程,调试器分别选择 Debug->x64 和 Release->x64,点击生成解决方案,即可生成最终调试可用和可直接运行的 x265.exe,分别在 build 目录下的 Debug 和 Release 文件夹中。

libx264.lib、libx265.lib的库调用

本人目前仅对 libx264.lib、libx265.lib 的库调用进行简单测试,在这里记录测试过程。

  1. 利用VS2019新建解决方案,在工程中创建 lib文件夹(放入libx264-161.lib 和 libx265.lib)、include文件夹(放入x264.h、x264_config.h 和 x265.h、x265_config.h)
  2. 调试器选择 Debug->x64
  3. 右键工程名,属性,在C/C++:常规->附加包含目录中,添加 $(SolutionDir)include;在链接器:常规->附加库目录中,添加 $(SolutionDir)lib;在链接器:输入->附加依赖项中,添加libx264-161.lib libx265.lib

C/C++:常规->附加包含目录
链接器:常规->附加库目录
链接器:输入->附加依赖项

  1. 添加源文件,调用 libx264.lib、libx265.lib 中 api 函数,测试两个库文件的正确性
#include <iostream>
#include <string>
#include "stdint.h" 

#if defined ( __cplusplus)
extern "C"		// 在C++代码中调用C语言代码,在C++的头文件中使用
{
	#include "include\x264.h"
	#include "include\x265.h"
};
#else
#include "include\x264.h"
#include "include\x265.h"
#endif

using namespace std;

int main(int argc, char** argv)
{
	x264_param_t x264_param;				// x264编码配置结构体
	x265_param   x265_param;				// x265编码配置结构体
	x264_param_default(&x264_param);		// x264编码配置初始化
	x265_param_default(&x265_param);		// x265编码配置初始化
	cout << "hello,x264" << endl;
	return 0;
}
  • 【报错】无法解析的外部符号 _x264_param_default,无法解析的外部符号 _x265_param_default
    报错
    错误原因:调试器选用了Debug->x86,或链接器未设置正确。改为Debug->x64后生成成功!

调试成功

project 测试成功!

  • 6
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值