什么是CRF模式
Constant Rate Factor(CRF)是一种码率控制模式,最早是X264提出来的,后面的X265和libvpx也都有类似的模式。这种码控模式可以达到基本恒定的质量,不过码率会随着内容的不同而波动。如果使用ffmpeg,可以通过下面的命令来设置crf:
ffmpeg -i input.mp4 -c:v libx264 -crf 23 output.mp4
x264和x265里面crf的设置范围是0-51,crf越高, 质量越差。CRF越低,质量越好。一般CRF低于18的时候,人眼感知不到明显的质量差异。
CRF和CQP有什么区别
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+VBV模式
CRF是保证质量的码控模式,对于最终的码率大小没有保证,在实际应用场景里面,很多时候需要一个最大码率的限制,此时就可以使用CRF+VBV的模式。这种模式一般需要设置三个参数,对应的参数名和意义如下:
crf
: 期望的质量,越低越好
bufsize
: 一个slide window的bit buffer,编码器需要保证这个buffer没有overflow。
maxrate
: 最大的local bitrate 。
举个例子:
ffmpeg -i <input> -c:v libx264 -crf 23 -maxrate 1M -bufsize 2M <output>
ffmpeg -i <input> -c:v libx265 -crf 28 -x265-params vbv-maxrate=1000:vbv-bufsize=2000 <output>
怎么设置bufsize的大小?bufsize一般是和maxrate的成一定的比例关系,譬如2x, 1x, 5x等。bufsize越大,对码控的约束越小,允许的码率波动越大。bufsize越小,对码控的约束越大,允许的码率波动就越小。所有这个值的设定取决于应用对于码率波动大小的要求。
网友评论