视频编码-CRF模式

视频编码-CRF模式,第1张

Constant Rate Factor(CRF)是一种码率控制模式,最早是X264提出来的,后面的X265和libvpx也都有类似的模式。这种码控模式可以达到基本恒定的质量,不过码率会随着内容的不同而波动。如果使用ffmpeg,可以通过下面的命令来设置crf:

x264和x265里面crf的设置范围是0-51,crf越高, 质量越差。CRF越低,质量越好。一般CRF低于18的时候,人眼感知不到明显的质量差异。

CQP也就是Constant QP,也就是对于同样的帧类型(I帧,P帧,B帧),使用相同的QP进行量化。编码器的失真是由量化引起的,相同的量化参数可以保证对于同样的残差信号可以实现大概相同的损失。

而CRF则是Constant Quality,这里的Quality是感知到的quality。CRF会对不同复杂度的帧使用不同的QP进行编码,从而达到一个恒定的感知到的质量。那么感知到的质量和信号层面的质量有什么差异?信号层面的质量可以使用PSNR来衡量,而感知到的质量和人眼的特性有关。一般来说,对于高复杂度(草地)或者剧烈运动的场景,细节的损失人眼是很难感知到的,而对于平坦区域的细节损失人眼很容易感知到(如平坦区域的马赛克或者banding)。

举一个例子,Constant QP在QP=18的时候编码,会把每帧的QP都设置为18(实际中不同类型的帧可能会有不同,暂时忽略);而CRF则可能对于复杂的帧,使用QP=20来编码,对于简单的帧,使用QP=18来编码。

CRF是保证质量的码控模式,对于最终的码率大小没有保证,在实际应用场景里面,很多时候需要一个最大码率的限制,此时就可以使用CRF+VBV的模式。这种模式一般需要设置三个参数,对应的参数名和意义如下:

crf : 期望的质量,越低越好

bufsize : 一个slide window的bit buffer,编码器需要保证这个buffer没有overflow。

maxrate : 最大的local bitrate 。

举个例子:

怎么设置bufsize的大小?bufsize一般是和maxrate的成一定的比例关系,譬如2x, 1x, 5x等。bufsize越大,对码控的约束越小,允许的码率波动越大。bufsize越小,对码控的约束越大,允许的码率波动就越小。所有这个值的设定取决于应用对于码率波动大小的要求。

转换压缩视频,要求视频通过 ffmpeg 压缩后视频清晰不卡顿,并且视频体积要求比较小

-r 帧率 -r 12 一秒12帧,一秒15帧可以看到比较流畅。

-vf scale=1366:768 分辨率可以设置小一点,为了清晰可以适当调整,同时也会影响到视频体积大小。

-crf 这里设置36, 一般18-28 就差不多了,这里因为要求视频压缩后越小越好,因此调整为36。

以上三条把握好,就可以压缩出来体积小清晰流畅的视频了,具体压缩效果以及参数可以根据现场情况自己进行测试。

如果不考虑电脑问题的话,加快速度肯定会影响到质量。

可以调低一点码率,比如调一下crf参数,这样会快一点,还有就是一个 -preset 参数, 有ultrafast、superfast、veryfast、faster、fast、medium、slow、slower、veryslow、placebo从快到慢。

还有就是编码的选择了,一般就选择avc(x264)吧,挺快的了。x265虽然好,但是编码实在是太慢了。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11263962.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-14
下一篇 2023-05-14

发表评论

登录后才能评论

评论列表(0条)

保存