x264的码率控制之CQP
发布网友
发布时间:2024-10-09 02:01
我来回答
共1个回答
热心网友
时间:2024-11-14 02:49
在x264编码器中,与码率控制相关的配置参数,包括但不限于CRF。默认的码率控制方式为CRF,而QP值可通过参数--qp指定,此操作将激活CQP(Constant Quality Prediction)码控方式。CQP方式下,P帧的QP值由用户指定,而I帧和B帧的QP值则需通过计算得出,计算依据是P帧的QP值以及f_ip_factor和f_pb_factor的值。
具体来说,当指定--qp 32时,P帧的QP值为32,I帧和B帧的QP值则需根据32和f_ip_factor、f_pb_factor值进行计算。通过设置参数如--ipratio和--pbratio,可控制I帧与P帧、P帧与B帧之间的QP值比例。进行测试时,命令行如下:x264cli.exe --profile main --preset medium -o .\x264_main_qp32.h264 F:\test_seq\HEVC\Kimono1_1920x1080_24.yuv --qp 32 --keyint 100 --fps 25 --frames 100 --psnr --threads 4。CQP方式下,指定的--vbv-bufsize值无效,VBV功能内部会关闭。同时,设置qp=0时,x264默认情况下会进行无损编码,但实际上,当profile低于high444时,不支持qp=0的设置。
为了验证x264的CQP=0编码是否实现无损压缩,可使用FFmpeg解码x264编码的码流得到YUV视频,再通过YUV视频对比软件进行逐帧逐像素对比。结果显示,原始YUV视频和解码后的YUV视频的像素值完全一致,证明CQP=0编码确实为无损编码。
尽管CQP作为一种编码器码率控制方式,但其特点在于编码器使用者直接指定每一帧的QP值,无需编码器内部的码率控制模块进行决策。在实际应用中,CQP通常用于视频编码器的客观压缩性能对比测试,如计算BD-rate值等。