首先说明,这三个选项cqp ,bitrate ,crf 互斥,只能设置一个,如果你在设置中同时设置了这三个选项,最后会覆盖掉之前的。
1.bitrate
参数解释:
--bitrate <integer> Set bitrate (kbit/s)
以目标位元率来编码视讯。目标位元率模式意味着最终文件的大小是已知的,但最终的品质则位置。此设定通常
与 2-pass 编码一起使用。
2.CQP [恒定量化参数]
参数解释:
http://forum.doom9.org/archive/index.php/t-89756.html
Constant Quantization Parameter. Also known as "CQ" or "constant quant"
http://blog.yikuyiku.com/?tag=cqp
H.264规范允许每个宏块使用不同的QP。x264目前没有实现这一特性,码率控制算法只会为每一帧生成一个QP。
参数应用:
Ratecontrol:
-q, --qp <integer> Force constant QP (0-69, 0=lossless)
在编码使用这个参数,就意味着,强制使用 恒定量化参数了。
將值設為0會產生無失真輸出。
3.crf
http://www.360doc.com/content/11/0613/21/3700464_126721552.shtml
当qp是把某个量化值作为目标,而bitrate 是把某个文档的大小作为目标时, crf 则是把某个品质作为目标。
CRF is more efficient than CQP only if you consider the final size.[如果你考虑到最终大小,crf会比cqp更有效一些]
CRF 和 CQP 都是越小越好,
----->
// //set bit rate
avctx->bit_rate = ptr_output_ctx->video_rate;//VIDEO_BIT_RATE;
avctx->rc_max_rate = ptr_output_ctx->video_rate;//VIDEO_BIT_RATE;
avctx->rc_min_rate = ptr_output_ctx->video_rate;//VIDEO_BIT_RATE;
avctx->bit_rate_tolerance = ptr_output_ctx->video_rate;//VIDEO_BIT_RATE;
avctx->rc_buffer_size = ptr_output_ctx->video_rate;//VIDEO_BIT_RATE;
avctx->rc_initial_buffer_occupancy = avctx->rc_buffer_size * 3 / 4;
avctx->rc_buffer_aggressivity = (float)1.0;
avctx->rc_initial_cplx = 0.5;
avctx->coder_type = FF_CODER_TYPE_AC; //different codec_type
//
avctx->thread_count = 1;
avctx->cqp = 26; //这里cqp 会把之前设置的bitrate 覆盖掉,也就是说encoder会按照设定的qp数值进行编码,而不是bitrate.