NVEnc.HEVC 压制参数与质量关系
以下对一些参数的描述,部分参考自NV官网,部分参考自网络零零散散的信息。
QVBR模式:--qvbr <float>
编码器基于控制帧的质量在目标值来确定各帧的码率。参数为0-51,参数越小,质量越高。这个模式可以基本对标X265的CRF,不同的是,QVBR还会受到最大码率限制。高质量压制视频,此模式为首选。
最大码率:--max-bitrate <int>
限制编码器可使用的最大码率。QVBR下,一般不指定会忽略最大限制,即无限制。但是有些编译的命令行有默认的最高限制。因此为了使参数通用,建议QVBR下,设置此参数,设置值可大方点,比如100000以上,保证不会欠码。
多次编码:--multipass <string>
不设置此参数,默认为1pass。编码器会根据预估的块QP进行码率分配编码。
2pass-quarter
:编码器会先通过一遍1/4分辨率,对帧预估码率。再在帧内,对宏块编码。2pass相较于1pass,对运动画面有更好的码率分配能力。
2pass-full
:第一遍用完整的分辨率预估的2pass。能力更强,但耗时更久。
前向预测:--lookahead <int>
开启此功能,编码器会缓冲指定数量的帧,估计这些帧的复杂性,并以此分配码率。在分配码率中,此功能默认开启自适应插入B帧和P帧。参数为0-32,值越大,质量越高。
预测强度:--lookahead-level <int>
0-3。数值越大,质量越高,速度越小。
自适应量化:--aq
开启自适应量化。此量化基于帧内信息,对人眼视觉更敏感的平面将给与更多的码率。因为是基于人眼的分配,在质量模型PSNR中,开启后会下降评估分。
自适应量化:--aq-temporal
开启自适应量化,此量化基于帧间的运动信息。人眼视觉对强烈运动的画面,注意力自然不及于平静的画面。此模式会将码率更多的分配给运动低的,画面更复杂的区域。此模式会扩大GOP的码率波动,I/P帧的码率更高,B帧更低,虽然最终的GOP码率仍将保持在一定目标内、因此对GOP的码率有要求的情形下不建议开启。此模式会使用CUDA加速,对性能有一定影响。
自适应量化强度:--aq-strength <int>
参数0-15。0为自动,数字越大,强度越强。
VBV缓冲:--vbv-bufsize <int>
VBV编码模式时的缓冲区大小。0为自动,单位为kbps。视频编码时用于临时存放的空间。高质量编码推荐不要设置过低的缓冲,以免限制码率。NV官网推荐大于4S时间的帧码率总大小。
B帧:-b, --bframes <int>
最大连续B帧限制。视频编码中,有3类帧。I帧为关键帧,包含最多的信息。P帧为可以向前参考引用画面信息的帧。因为有部分信息需参考自其他帧,所以P帧小,但无法独立被解码。B帧为在P帧的基础上,还可以向后,即未来帧参考的帧类型。B帧可以前后双向参考,压缩程度更高,但解码要求也更高。可以想象到,B帧限制宽松的话,压缩率更高,但解码更难。最大值为5。
最大GOP长度:--gop-len <int>
GOP为一段可以完整解码的帧组合。因为P帧和B帧是无法独自被解码的,需要参考其他帧信息。如此一个个参考下去,最终会参考到I帧为止。以一个I帧搭配若干P帧B帧,互相参考,从而可以解码,这个的一组帧即为GOP。GOP长度在视频帧序列中,表现为两个I帧的距离。GOP太长,I帧的占有率会下降,编码难度提升的同时,参考预测的算法也会出现更多错误。一般设置10S帧数左右。
参考帧:--ref <int>
参考时供搜索的最大距离。最大设置值为16。一般无需太高,质量不会提升的。4-8。
加权预测:--weightp
P帧的加权预测。当存在B帧时,此项失效。加权预测P帧对亮度渐变场景有很好的应用。
运动矢量精度--mv-precision <string>
auto
… 自动
Q-pel
… 1/4 像素 (高精度)
half-pel
… 1/2 像素
full-pel
… 1 像素 (低精度)
实测
X265对比参数:
--preset slow --crf 18.0 --deblock -1:-1 --ctu 32 --qg-size 8 --pbratio 1.2 --cbqpoffs -2 --crqpoffs -2 --no-sao --me 3 --subme 5 --merange 38 --b-intra --limit-tu 4 --no-amp --ref 4 --weightb --keyint 360 --min-keyint 1 --bframes 6 --aq-mode 1 --aq-strength 0.8 --rd 5 --psy-rd 2.0 --psy-rdoq 1.0 --rdoq-level 2 --no-open-gop --rc-lookahead 80 --scenecut 40 --qcomp 0.65 --no-strong-intra-smoothing
码率15M vmaf= min: 89, mean: 98.9 压缩比:1.15 时间:504s
NVEnc基准参数--qvbr 18 --codec h265 --preset P7 --max-bitrate 50000
码率14.3M vmaf= min: 80, mean: 98.6 压缩比:1.21 时间:59S
NVEnc参数全开 限制GOP长度,控制跟X265相同的码率水平。
--qvbr 18 --codec h265 --preset P7 --output-depth 10 --max-bitrate 500000 --aq --aq-strength 15 --aq-temporal --bframes 5 --ref 6 --lookahead 32 --lookahead-level 3 --gop-len 200 --mv-precision q-pel
码率14.8M vmaf= min: 80, mean: 98.7 压缩比:1.16 时间:39S
可以看到,NVEnc基本没啥提升。我也尝试了其他参数组合,码率和质量关系一直很稳定,不太会受到参数的影响。最终的结果VMAF评估一直很稳定。