x265重编码UHD原盘

本文原是发表于mine.pt的一篇x265重编码讨论帖。

最近研究了一下x265重编码UHD原盘的参数。相比以前x264重编码BD原盘,主要的区别在与如何保留UHD视频的HDR信息。

x265 VUI (Video Usability Information) 参数

先介介绍如何正确写如HDR信息。以电影五十度飞为例,mediainfo视频部分信息如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Video
ID : 4113 (0x1011)
Menu ID : 1 (0x1)
Format : HEVC
Format/Info : High Efficiency Video Coding
Commercial name : HDR10
Format profile : Main 10@L5.1@High
Codec ID : 36
Duration : 15 s 15 ms
Width : 3 840 pixels
Height : 2 160 pixels
Display aspect ratio : 16:9
Frame rate : 23.976 (24000/1001) FPS
Color space : YUV
Chroma subsampling : 4:2:0 (Type 2)
Bit depth : 10 bits
Color range : Limited
Color primaries : BT.2020
Transfer characteristics : PQ
Matrix coefficients : BT.2020 non-constant
Mastering display color primaries : Display P3
Mastering display luminance : min: 0.0050 cd/m2, max: 1000 cd/m2
Maximum Content Light Level : 952 cd/m2
Maximum Frame-Average Light Level : 200 cd/m2

Color range开始,都是UHD相对于之前BD要多添加的VUI信息。对应的x265参数依次如下

1
2
3
4
5
6
7
8
9
--range limited
--colorprim bt2020
--transfer smpte2084
--colormatrix bt2020nc
--master-display "G(13250,34500)B(7500,3000)R(34000,16000)WP(15635,16450)L(10000000,50)"
--max-cll "952,200"

--max-luma 1023
--chromaloc 2

其中--master-display参数部分前半部分G(13250,34500)B(7500,3000)R(34000,16000)WP(15635,16450)对应color primaries : Display P3,后半部分L(10000000,50)对应luminance : min: 0.0050 cd/m2, max: 1000 cd/m2,数值上对应关系×10000

最后的两个参数是参考scene组作品追加的,--chromaloc 2的讨论参考https://forum.doom9.org/showthread.php?t=174491&page=2

固定的参数

1
2
--profile main10 --level-idc 5.1 --output-depth 10 --no-open-gop --no-sao
--aud --hrd

多是一些确定规格,考虑兼容性的设置。audhrd是两个默认关闭,但scene作品都开启的参数。aud我不清楚是干啥的,hrd是一个与解码相关的参数。

针对计算机性能可调整的参数

这一部分参数主要是调整x265编码时计算复杂度的参数,根据自己电脑的算力以及自己能接受的速度以及个人对作品的严苛程度而定。预设--preset推荐slow或者slower,具体预设值参考http://x265.readthedocs.io/en/default/presets.html。由于我找到测试用的一台服务器非常老,不支持AVX2指令集,编码效率非常低,所有我是在slow这一档的基础上调整参数的。有好机器的朋友建议在slower基础上调整。

1
--preset slow --bframes 8 --no-rect --no-amp

bframes按照x264时代的重编码规则,是先设置个较大的值(16)试跑一遍样本,然后根据x264的输出信息(最大连续b帧占比小于一个阈值)来确定最大连续b帧。这个参数非常影响编码速度。按照x264的经验,8这个值往往是不够的,但是在x265的中默认预设值最大也是只是8,说明这个值确实很影响速度,没必要再调高了。当然你还是可以按照原来的方式确定这个值。

--no-rect --no-amp两参数,是以前逛论坛看到一个大神说的,这两个算法纯属为了往x265中塞专利搞的,提升有限且耗时。实际效果未测试。

就我的观察来看,scene组的参数基本就是默认--preset slow,没有其他修改。不过以前在x264时代,scene组的重编码是被个大top组鄙视的。按照这个标准,如果是想做x265时代的top组,至少得要搞个--preset slower吧。

具体编码作品时需调整的参数

这一部分是针对具体的作品重编码时需调整的参数,多为码率控制参数。

1
2
3
4
5
6
7
8
--crf 17?16-20
--aq-strength 1.0?0.6-0.8
--qcomp 0.60?0.60-0.70
--ipratio 1.4?1.4-1.1
--pbratio 1.3?1.3-1.1
--psy-rd 1.0?
--psy-rdoq 1.0?
--deblock 0:0?-3:-3

?前面的是默认值,后面是参考范围值,仅针对真人电影,动画片是另外一说。--crf 17是scene组的默认参数。

按照x264时代的规则,用心去做一部作品的时候是需要做参数测试的,比如说确定crf,先设置16 17 18 19几个值跑一遍测试片段,然后一帧帧的与片源比,找出来能接受的范围,假设是17-18。然后再在这个区间每隔0.1或者0.2取值做测试。所有你不确定的参数基本都是按这个方式去做。当然有些经验丰富的人员不会每个参数都这么测,毕竟太费时间了,有些参数他们通过观看片源,就能估计得差不多了。

下面说一下我个人对这几个参数的理解,可能不对

  • aq-strength控制的是同一张画面中码率的分布,值越高越倾向于分配给细节更多码率。当一张画面颗粒感比较强(胶片电影转录)应该用较低的值。
  • qcomp控制时间轴上码率的分配,变化越快的画面倾向与分配跟多的码率,多多少就是有这个参数来控制。注意这个参数是在计算公式中是指数,不宜变化太大。一般用默认值0.6即可,遇到一些动作片,速度与激情,变形金刚这种可以稍微调高一点(0.65)。
  • ipratiopbratio,这是一对参数,一般同时变化。这两参数控制i帧与p帧,p帧与b帧的质量比。当你做测试的时候发先p帧,b帧质量比较差,而i帧都满意的时候就该把这个值调小一点了。不过会显著加大整体码率。
  • psy-rdpsy-rdoq,所有带psy的参数都是玄学参数,我是搞不清楚的。在做参数测试的时候会发现它们对码率的影响要远大于对画质的影响,用得不好会很浪费。建议用默认值或者询问有经验的压制员。
  • deblock参数国际惯例真人片-3::3

总结

最后我在测试处理五十度飞这部片子时候的参数大概是这个样子

1
--crf 17 --preset slow --profile main10 --level-idc 5.1 --output-depth 10 --no-rect --aq-strength 0.8 --bframes 8 --no-open-gop --master-display "G(13250,34500)B(7500,3000)R(34000,16000)WP(15635,16450)L(10000000,50)" --colorprim bt2020 --colormatrix bt2020nc --transfer smpte2084 --range limited --max-luma 1023 --max-cll "952,200" --hrd --aud --deblock -3:-3 --no-sao --chromaloc 2

其中有些参数没写出来说明就是用的默认值没有调整。原则上需要做很多参数测试我都没做,x265跑起来实在是太慢了。我这参数压制出来的作品质量等于scene组的,高质量的不因照搬。最终把50.2G的原盘重编码压缩成了13.7G(仅考虑视频大小)。

1
2
x265 settings:
-D 10 --crf 16.6 --preset slower --profile main10 --level 51 --high-tier --no-open-gop --cutree --no-amp --no-sao --no-strong-intra-smoothing --ctu 64 --rc-lookahead 40 --cbqpoffs -2 --crqpoffs -2 --deblock -3:-3 --ref 4 --bframes 6 --rd 3 --subme 3 --ipratio 1.3 --pbratio 1.2 --aq-mode 1 --aq-strength 0.7 --qcomp 0.6 --psy-rd 2.0 --psy-rdoq 1.0 --range limited --hdr-opt --colorprim 9 --colormatrix 9 --transfer 16 --master-display G(13250,34500)B(7500,3000)R(34000,16000)WP(15635,16450)L(40000000,50) --max-cll 323,144 --repeat-headers --aud --hrd