码率控制参数:
bitrate
默认:无
说明:三种可选的码率控制方法之二。设置x264使用固定目标比特率模式。固定目标比特率意味着最终文件的大小是可知的,但是目标的质量是不可知的。 x264会试图让最终文件的整体码率与给定的码率相等。参数的量纲为kilobits/sec(8bit = 1byte)。
通常这个选项和–pass选项配合进行2趟编码。
这个选项和 –qp和–crf是互斥的,三者只能选一个。
参见:–qp, –crf, –ratetol, –pass, –stats
-b bitrate 设置比特率,缺省200kb/s
-maxrate bitrate设置最大视频码率容忍度
-minrate bitreate 设置最小视频码率容忍度
-bufsize size 设置码率控制缓冲区大小
-bufsize (FFmpeg)

Depends on the profile level of the video being encoded. Set only if you’re encoding for a hardware device.

ffmpeg -i input -c:v libx264 -crf 20 -maxrate 400k -bufsize 1835k

这将会有效的将crf值锁定在20,但是如果输出码率超过400kbps,在这种情况下编码器会将质量降低到低于crf 20。

x264的三种码率控制模式

三种模式为:
qp模式…bitrate模式…crf模式
下面挨个解释一下…需要注意的是三种码率控制方法不能共存,有其一不能有另外两个!
qp模式
即为固定量化值(Constant Quantizer)模式来编码视频…需要注意的是这里的量化参值为P帧的量化值…I 帧(IDR帧)和B帧的量化值又由ipratio和bpratio参数来确定…不过通常这两个参数无需手动设置。
简单点说qp模式就是:相对于压缩前的原视频来说…每一个 P 帧 …I 帧 … B帧都会固定的损失一部分质量…损失判定是固定的.但由于I P B帧的插入是不确定的…所以最终文件的大小是无法确定的。
设置为qp0时将产生无损的画面输出(输出文件一般会比源文件大出数倍以上)…并且相同视觉质量时…qp模式压出的视频文件比crf模式大。
bitrate模式
即为固定目标码率模式(固定目标比特率模式),x264会试图让最终文件的整体码率与给定的码率相等,这会使最终文件的大小是确定的,适用于精确控制体积,但由于这是一次编码,所以画质上不如同等体积的crf,故一般配合pass参数使用。
crf模式
即固定Ratefactor模式…如果说QP是固定量化器,bitrate是固定文件最终大小,那么crf则是则是固定“肉眼质量”,crf可以提供跟QP一样的视觉的质量…但是文件更小。
crf是通过降低那些“不那么重要”的帧的质量做到这一切的~,“不那么重要”意思是过于耗费码率又难以用肉眼察觉的帧…省下来的码率会用在其它更有效的帧里。
其实crf就是一个浮动qp模式,其按照特定的标准,根据人眼的需求,给予每帧不同的qp值 ,但玩好crf模式…和aq…psy…qcomp等参数都脱不开关系。
需要注意的是crf模式无法预测最终文件体积。

在VBR和ABR情况下,可以设置vbv-maxrate和vbv-bufsize(很多情况下设置为vbv-maxrate = vbv-bufsize = bitrate,注意vbv-bufsize的量纲是不同,即最大缓存1s的数据)。
在RC_ABR码率控制方法下,如果vbv-maxrate == bitrate这时候其实进行的是CBR码率控制方法,encoder力争控制每一帧输出都稳定在bitrate上。
如果设置vbv-maxrate则vbv-bufsize必须设置,否则会提示"VBV maxrate specified, but no bufsize, ignored", vbv-maxrate会被改回为0。
如果设置vbv-bufsize而vbv-maxrate没有设置,则会提示"VBV maxrate unspecified, assuming CBR",vbv-maxrate会被设为bitrate,此时进行CBR编码。
一般设置为 vbv-maxrate = vbv-bufsize = a*bitrate。
a=0,不启用VBV机制,编码性能最好,适用于硬盘文件编码;但它输出的码率波动性大,有可能某些帧的比特数过高,不适用于有实际带宽限制的流媒体传输。
0<a<1,这样的设置没有什么意义,得不到任何的好处。
a=1,等于CBR,CBR是一种复杂和平滑场景都不大讨好的码率控制方法,一般不采用这一方法。
a>1,对每帧数据有限制,但又可以暂时超过平均码率,适用于流媒体传输。
对于某些特殊场景编码,例如电脑屏幕编码,它的特点是I帧纹理细节丰富,编码数据极大,P帧变化很小或者根本没变化,p帧数据很小。
这种情况,如果不设置vbv参数(保持缺省值0),I帧数据压不下来,码流会周期性的高低变动;有可能造成网络拥塞,数据包丢失,解码端花屏。
如果设置a=1,I帧得到限制,可以压下来,但编码质量下降太多,主观质量差。
因此需要根据网络设置成a>1,使得I帧可以暂时有限度的大于平均码率,而P帧编码时候还能把平均码率降下来。

视频编码器常用的码率控制方式包括abr(平均码率),crf(限制码率),cqp(固定质量),ffmpeg中AVCodecContext显示提供了码率大小的控制参数,但是并没有提供其他的控制方式。ffmpeg中码率控制方式分为以下几种情况:
1.如果设置了AVCodecContext中bit_rate的大小,则采用abr的控制方式;
2.如果没有设置AVCodecContext中的bit_rate,则默认按照crf方式编码,crf默认大小为23(此值类似于qp值,同样表示视频质量);
3.如果用户想自己设置,则需要借助av_opt_set函数设置AVCodecContext的priv_data参数。下面给出三种控制方式的实现代码:

int bpsValue; //码流控制方式的对应值
int bpsMode; //码流控制方式,0表示平均码率(abr),1表示固定码率(crf),2表示固定质量(cqp)
AVCodecContext* pCodecCtx;

//码率控制方式
string modeValue = int2String(bpsValue);
switch (bpsMode) {
case 0:pCodecCtx->bit_rate = bpsValue*1000;break;
case 1:av_opt_set(pCodecCtx->priv_data,"crf",modeValue.c_str(),AV_OPT_SEARCH_CHILDREN);break;case 2:av_opt_set(pCodecCtx->priv_data,"qp",modeValue.c_str(),AV_OPT_SEARCH_CHILDREN);break;
default:pCodecCtx->bit_rate = bpsValue;break;
}

mb_qmin的替代,最小的量化因子。取值范围1-51。建议在10-30之间。

-qscale q 使用固定的视频量化标度(VBR)

-qdiff q 量化标度间最大偏差 (VBR)

-qblur blur 视频量化标度柔化(VBR)

-qcomp compression 视频量化标度压缩(VBR)

-rc_init_cplx complexity 一遍编码的初始复杂度

-b_qfactor factor 在p和b帧间的qp因子

-i_qfactor factor 在p和i帧间的qp因子

-b_qoffset offset 在p和b帧间的qp偏差

-i_qoffset offset 在p和i帧间的qp偏差题)

ffmpeg多种码率控制方式的实现相关推荐

  1. ffmpeg 设定码率

    主思路 H.264 的建议码率设定方案是 crf ,如果需要比较高的画质,可以设为10左右,如果要要兼顾画质和文件大小,可以设为17左右,默认是23. 详情 ffmpeg支持多种方法设定码率,-gp ...

  2. 视频编码中的RC(rate control)是什么?码率控制 CBR (Constant Bit Rate)、VBR (Variable Bit Rate)

    再看RXW源码的时候在视频编码结构体里有一个RC结构体,RC(rate control)到底是啥? 码率控制技术 RC (Rate Control) 是实际视频编码器中一个非常重要的技术模块. 根据实 ...

  3. X264码率控制总结1——ABR,CQP,CRF

    lakeone X264码率控制总结1--ABR,CQP,CRF 1. X264显式支持的一趟码率控制方法有:ABR, CQP, CRF. 缺省方法是CRF.这三种方式的优先级是ABR > CQ ...

  4. x264参数介绍(帧类型和码率控制,分析和视频可用性信息)

    鉴于x264的参数众多,各种参数的配合复杂,为了使用者方便,x264建议如无特别需要可使用preset和tune设置.这套开发者推荐的参数较为合理,可在此基础上在调整一些具体参数以符合自己需要,手动设 ...

  5. x264参数介绍(-,帧类型和码率控制)

    预设值 预设值是x264在r1177版本增加的一个方便的命令行选项.可以用x264.exe –fullhelp查看所有的命令行帮助. profile 默认:无 说明:限制输出文件的profile.这个 ...

  6. 视频编码码率控制:CBR、VBR和ABR

    下面介绍不同的码率控制模型和适用场景: CQP:固定QP,最简单的码率控制方式,每帧图像都按照一个特定的QP来编码,每帧编码后的数据量有多大是未知的,既不是码率优先模型也不是质量优先模型,不过是实现最 ...

  7. ABR CQP CRF码率控制总结

    1. X264显式支持的一趟码率控制方法有:ABR, CQP, CRF. 缺省方法是CRF.这三种方式的优先级是ABR > CQP > CRF. [cpp] view plaincopy ...

  8. 转: X264码率控制总结1——ABR,CQP,CRF

    2019独角兽企业重金招聘Python工程师标准>>> 1. X264显式支持的一趟码率控制方法有:ABR, CQP, CRF. 缺省方法是CRF.这三种方式的优先级是ABR > ...

  9. x264中码率控制(二)x264_ratecontrol_start函数

    在一帧的编码前就选择QP值.帧层码率控制,到这一步,一帧中所有宏块还是统一qp的 void x264_ratecontrol_start( x264_t *h, int i_force_qp ) {x ...

  10. VVC码率控制中的质量依赖因子QDF

    本文来自提案JVET-M0600<Quality dependency factor based rate control for VVC> VTM沿用了HM中的码率控制方式,即R-lam ...

最新文章

  1. 基于Linux的视频传输系统(上大学时參加的一个大赛的论文)
  2. 苹果放大招?「廉价版」5G iPhone 将揭晓,M2芯片来袭?
  3. 互联网协议 — L2TP 二层隧道协议
  4. Jquery学习笔记:获取jquery对象的基本方法
  5. HotSpot源码(二):Java与C语言对比
  6. Linux 服务器停止当前运行的程序,实验,代码
  7. 科普文:为什么不能在服务器上 npm install ? #30
  8. deleted 表和 inserted 表
  9. 你读过的最心酸的句子有哪些?
  10. python将图片转换成二进制文本逻辑_将python图片转为二进制文本的实例
  11. 电子元器件选型——电阻
  12. 多次请求后tomcat网页假死
  13. 烟火高桥蝶变“中非商港”,开放雨花引领国际商贸
  14. 2017年学习总结-新的开始
  15. 【C语言】给出一个不多于5位的正整数,要求:1.求出它是几位数;2.分别输出每一位数字;3.按逆序输出各位数字。
  16. Linux文件查看与处理
  17. hr面试性格测试30题_面试性格测试题60道
  18. IPv6设备配置选项
  19. TP5查询构造器查询语句select、find、colum、value详解
  20. VGG网络讲解——小白也能懂

热门文章

  1. 微盟致远OA聚水潭YonSuite系统对接集成整体解决方案
  2. (Demo3D 学习笔记)案例1:自创组件,可以一键自动连接场景中的其他相关组件
  3. Hinton,Lecun和Bengio三巨头联手再发万字长文:深度学习的过去、现在和将来
  4. (二)Excel函数应用之数学和三角函数
  5. c++实现串口功能之termios.h头文件研读<一>
  6. 今日头条的企业服务产品线
  7. axios 上传文件 封装_axios 封装上传文件的请求方法
  8. 分享一下最近合成游戏源码
  9. XGBoost结合SHAP应用:回归、二分类、多分类模型
  10. 【低代码平台浅析】钉钉宜搭