码率控制(二):CRF详解

码率控制(二):CRF详解

在上一篇文章码率控制(一):理解码率控制模式(x264,x264,vpx)已经介绍过CRF(Constant Rate Factor)了,本篇文章进一步介绍CRF的原理。CRF是x264和x265默认的码率控制模式,在libvpx中也可以使用CRF。CRF取值在0到51间。取值越小质量越好压缩率越低,取值越大压缩率越高质量越低。

CRF在进行码率控制时不会试图达到某个特定码率,而是要保持稳定的质量。码流的大小将由源视频的复杂度决定。

对于x264,CRF建议取值在18到28间,默认为23。

ffmpeg -i input.mp4 -c:v libx264 -crf 23 output.mp4

对于x265默认为28。

ffmpeg -i input.mp4 -c:v libx265 -crf 28 output.mp4

libvpx没有默认值,它的CRF取值范围为0到63。对于1080p视频建议取值31。

ffmpeg -i input.mp4 -c:v libvpx-vp9 -crf 31 -b:v 0 output.mkv

如果你无法确定需要的CRF值,你可以从默认值开始慢慢尝试。如果质量低于预期则减小CRF,如果文件太大则增大CRF。每当CRF增大/减小6,文件尺寸将减半/加倍。

CRF应该用于离线场景以达到最优效果。

码率如何变化?

为了让你直观了解不同分辨率视频的码率与CRF的关系,下面给出了复杂度不同的4段1分钟视频的平均码率(MBit/s)与CRF的关系。编码器为x264。

可以看出不同分辨率的视频的码率和CRF都满足对数关系。

CRF vs CQP

CQP模式在编码时会保持每帧的QP不变,例如设定QP=18,则整个序列每帧的QP都为18(依据帧类型不同会有QP offset,但是影响不大)。而CRF会通过动态调整每帧的QP保持质量恒定,例如编码是设定CRF=18,对于运动多的帧QP可能增加到20,运动少的帧QP可能会减小到16。

下图是QP和CRF等于17和23时,每帧比特数的变化。

可以看到CRF的比特数总是少于QP,意味着保持质量的同时CRF能节省比特。

为什么运动如此重要?

相比运动物体,人眼对于静止物体能感知到更多细节。因此,编码器可以对运动物体采用更大的压缩(去除更多细节),对静止物体采用更小的压缩(保留更多细节)。

人眼视觉系统会被运动分散注意力,且运动物体在屏幕上停留时间少,所以能觉察到的失真少。而静止物体在屏幕停留时间长有足够时间观察,且无法分散注意力,所以能觉察到的失真多。

用什么评价指标?

如果你用PSNR等简单的评价指标比较视频质量,你可能会发现CRF的质量低于CQP。但是人眼主观观察可以发现CRF的质量不低于甚至高于CQP的质量。这是因为PSNR等指标不考虑感知质量,仅考虑每帧的统计结果。可以使用VQMVMAF进行主观评价。

翻译自:https://slhck.info/video/2017/02/24/crf-guide.html

感兴趣的请关注微信公众号Video Coding

猜你喜欢

转载自blog.csdn.net/Dillon2015/article/details/105947341
今日推荐