x265工程简介、编译、调试测试

1. x265工程项目

  https://x265.readthedocs.io/en/master/
  新一代高效视频编码标准(HEVC,也称为 H.265)主要为应对高清、超高清视频的带宽和存储需求而生,可支持 8K 超高清视频,图片尺寸可达 8192x4320 像素。
  x265编码器项目由 MulticoreWare 于 2013 年推出,旨在各种硬件平台上提供最高的压缩效率和最高的性能,成为最优秀的HEVC编码器。x265 编码器利用了 x264编码器中许多出色的视频编码功能和优化项,整体上可作为开源软件库使用,也提供了命令行形式的可执行文件以方便测试和开发。
  本专栏基于最新的Release V3.5大版本对x265中涉及的编码工具、优化项等进行梳理。首先从VideoLan官网下载x265的最新源码:

git clone https://bitbucket.org/multicoreware/x265_git.git

2. 编译

  要编译 x265,必须先安装 Git 和CMake(2.8.8 或更高版本)。如果需要将汇编代码也编译进去,还需要安装YASM(1.2.0 或更新版本),或者NASM(2.13 或更新版本)。然后按照以下简单步骤操作:

2.1 Linux/MaxOS

在Linux/MacOS系统下,编译可执行文件:

# ubuntu packages:
$ sudo apt-get install git-all cmake cmake-curses-gui build-essential yasm
# Note: if the packaged yasm is older than 1.2, you must download yasm (1.3 recommended) and build it
# If you are compiling off the default branch after release of v2.6, you must have nasm (2.13 or newer) installed and added to your path

$ git clone https://bitbucket.org/multicoreware/x265_git.git
$ cd x265/build/linux
$ ./make-Makefiles.bash
$ make -j8

  使用make-Makefiles.bash脚本会进行基础的编译配置,检测电脑系统环境、寻找编译器、汇编器、生成版本号等;中间会生成以下配置界面,可以根据个人需要选择生成编码器可执行文件、Debug/Release版本、动态库等,使用“enter”进入并修改完成后,按“c”进行配置,按“g”结束配置并应用。初学和梳理代码时可使用 Debug+关闭汇编 的版本,便于跟踪代码。
在这里插入图片描述
  make之后,可以在build/linux目录下,拿到可执行文件x265,动态库libx265.dylib, 静态库libx265.a。使用x265查看编译是否ok:

./x265 -V
x265 [info]: HEVC encoder version unknown
x265 [info]: build info [Mac OS X][clang 12.0.0][64 bit][noasm] 8bit
x265 [info]: using cpu capabilities: none!

2.2 Android

  在x86环境下编译Android可使用的可执行文件/编码库,需要用到交叉编译工具,官方推荐cmake+交叉编译链的方式。在linux下交叉编译链比较完善,命令比较简单:

$ sudo apt-get install gcc-arm-linux-gnueabi g++-arm-linux-gnueabi
$ sudo apt-get install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
$ cd x265/build/arm-linux
$ ./make-Makefiles.bash
$ make -j8

  同样在当前目录下会生成供Android使用的可执行文件x265与动态/静态库。注意在使用脚本配置时,此时就可以使用Release+开汇编的版本了,可以明显提升编码器的编码速度。
  在MacOS下,使用ndk自带的toolchains中提供的aarch64-linux-android-gcc,aarch64-linux-android-g++未能编译成功,主要问题还是macOS下的cmake与交叉编译链的不适配。此时推荐自建jni+ndk-build的方式,来交叉编译可执行文件,相对会容易些。

3. 测试

3.1 序列准备

HEVC官方提供的数据集YUV:https://blog.csdn.net/ranghanqiao5058/article/details/93996377

下载需要较长时间,我们可以简单从官方测试码流(http://ftp.kw.bbc.co.uk/hevc/hm-10.0-anchors/bitstreams/ra_main/)中随意下载一个,使用ffmpeg解码为YUV格式,作为编码输入:

#解码
ffmpeg -i BQMall_832x480_60_qp22.bin BQMall_832x480_60_qp22.yuv
#播放验证
ffplay -video_size 832x480 -i BQMall_832x480_60_qp22.yuv

3.2 编码命令

一般编码必须包含的基础命令有 输入、分辨率、帧率、输出

#编码
./x265 --input BQMall_832x480_60_qp22.yuv --input-res 832x480 --fps 60 -o output.h265
#播放验证
ffplay -i output.h265

  输入yuv大小为359MB,输出码流大小为1.4MB,压缩了约256倍,这也是视频必须编码压缩的意义所在。
  x265提供了三百多个编码命令可供选择,包含了预处理、intra/inter工具、量化、变换、后处理等各个编码优化项,psnr/ssim等质量把控工具、线程/内存等工程优化项、以及rc、rdo等工具。详细可参考官方文档:

https://x265.readthedocs.io/en/master/cli.html#executable-options

  另外x265也根据压缩率和编码速度划分出了0-9共10个预设preset,每个preset包含了不同的工具集,我们也可根据某一preset基础上进行微调。10个preset为:

0:ultrafast (编码速度最快,压缩率最低)
1:superfast
2:veryfast
3:faster
4:fast
5medium (default)
6:slow
7:slower
8:veryslow
9:placebo (编码速度最慢,压缩率最高)
//各preset所包含工具集可参考官方文档:https://x265.readthedocs.io/en/master/presets.html

  学术研究可采用CQP方式,一般使用(22,27,32,37)QP对儿计算bdrate,主要衡量和其他编码器的压缩率(后续有时间会补充一些x265与x264的对比测试)。
  实际应用多采用ABR模式,在给定带宽下进行编码压缩。一般不在乎延时的需求(类似短视频、长视频)会以高压缩率为主要指标,如placebo档位;而低延时的转码环境则会在压缩率与编码速度之间进行综合考虑,在延时可接受的情况下尽可能提高压缩率(如直播场景);针对超低延时场景,则会牺牲压缩率与画质,尽可能保证实时,(如视频通话、视频会议等RTC场景),会倾向于在ultrafast、superfast档位中做fine-tune。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值