x264码率控制

原因:在做视频编码时,当我们给定编码器一个目标码率的时候,编码器内部是怎么达到码率要求的那

概况:关于码率控制有两个目的,第一:兼容传输,播放条件。第二:获取更高的视频质量。

码率控制分为两类:CBR:constant bit rate,固定码率。 VBR:variable bit rate 可变码率。

VBR:可变码率是一类码率控制算法的统称,他们的特点是局部的码率可变的,常用的可变码率子类包括如下:

1:abr:average bit rate,控制整个文件的平均码率。

2:crf:constant refactor ,恒定质量。总码率不可控

3:cqp:constatnt qp,恒定量化参数。关闭一切码率控制算法,与crf的区别在于,crf允许x264对每一帧,每一个宏块进行选取qp,从而产生一个恒定的质量。

对应的x264参数如下:

#define X264_RC_CQP                  0
#define X264_RC_CRF                  1
#define X264_RC_ABR                  2

//恒定QP
int         i_qp_constant;  /* 0 to (51 + 6*(x264_bit_depth-8)). 0=lossless */
int         i_qp_min;       /* min allowed QP value */
int         i_qp_max;       /* max allowed QP value */
int         i_qp_step;      /* max QP step between frames */

//恒定质量
float       f_rf_constant;  /* 1pass VBR, nominal QP */
float       f_rf_constant_max;  /* In CRF mode, maximum CRF as caused by VBV */

//平均码率
 int         i_bitrate;

恒定码率CBR:

并不是每个瞬间码率都相同,也不是每一秒码率相同。固定码率指的是固定信道容量。此时就涉及到了VBV(video buffer verifier)视频缓冲区校验器。vbv模型:编码码率通过一个容量受限的信道传输到解码设备,解码设备在解码前有一个缓存,解码器实时从缓存区读取数据解码,保证即不上溢也不下溢(即拿取速度过快或过慢)。

对应参数如下:最终生成的mp4文件可以看出码率为147kbps.,buffer_size的带下取决于容忍的延迟以及播放器的硬件内存限制

int         i_vbv_max_bitrate;//缓冲区最大填充速度
int         i_vbv_buffer_size;//缓冲区大小.

FFmpeg.exe -i q.mp4 -crf 21 -maxrate 150k -bufsize 450k -codec:v:0 libx264 -s 320x240 -r 15 out.mp4

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值