很多朋友问起我关于ffmpeg中VBR的问题,主要是该设置哪些参数,该如何设置等问题。以前我也没有研究过ffmpeg的VBR,所以就在网上查找了一下,无功而返,后面就看ffmpeg.c的源代码,初步认为通过下面的参数或选项便可以实现VBR的控制:

{ "b", HAS_ARG | OPT_VIDEO, {(void*)opt_video_bitrate}, "set video bitrate (in kbit/s)", "bitrate" },
    { "qscale", HAS_ARG | OPT_EXPERT | OPT_VIDEO, {(void*)opt_qscale}, "use fixed video quantiser scale (VBR)", "q" },
    { "qmin", HAS_ARG | OPT_EXPERT | OPT_VIDEO, {(void*)opt_qmin}, "min video quantiser scale (VBR)", "q" },
    { "qmax", HAS_ARG | OPT_EXPERT | OPT_VIDEO, {(void*)opt_qmax}, "max video quantiser scale (VBR)", "q" },
    { "lmin", HAS_ARG | OPT_EXPERT | OPT_VIDEO, {(void*)opt_lmin}, "min video lagrange factor (VBR)", "lambda" },
    { "lmax", HAS_ARG | OPT_EXPERT | OPT_VIDEO, {(void*)opt_lmax}, "max video lagrange factor (VBR)", "lambda" },
    { "mblmin", HAS_ARG | OPT_EXPERT | OPT_VIDEO, {(void*)opt_mb_lmin}, "min macroblock quantiser scale (VBR)", "q" },
    { "mblmax", HAS_ARG | OPT_EXPERT | OPT_VIDEO, {(void*)opt_mb_lmax}, "max macroblock quantiser scale (VBR)", "q" },
    { "qdiff", HAS_ARG | OPT_EXPERT | OPT_VIDEO, {(void*)opt_qdiff}, "max difference between the quantiser scale (VBR)", "q" },
    { "qblur", HAS_ARG | OPT_EXPERT | OPT_VIDEO, {(void*)opt_qblur}, "video quantiser scale blur (VBR)", "blur" },
    { "qsquish", HAS_ARG | OPT_EXPERT | OPT_VIDEO, {(void*)opt_qsquish}, "how to keep quantiser between qmin and qmax (0 = clip, 1 = use differentiable function)", "squish" },
    { "qcomp", HAS_ARG | OPT_EXPERT | OPT_VIDEO, {(void*)opt_qcomp}, "video quantiser scale compression (VBR)", "compression" },
    { "bt", HAS_ARG | OPT_VIDEO, {(void*)opt_video_bitrate_tolerance}, "set video bitrate tolerance (in kbit/s)", "tolerance" },
    { "maxrate", HAS_ARG | OPT_VIDEO, {(void*)opt_video_bitrate_max}, "set max video bitrate tolerance (in kbit/s)", "bitrate" },
    { "minrate", HAS_ARG | OPT_VIDEO, {(void*)opt_video_bitrate_min}, "set min video bitrate tolerance (in kbit/s)", "bitrate" },
    { "bufsize", HAS_ARG | OPT_VIDEO, {(void*)opt_video_buffer_size}, "set ratecontrol buffer size (in kByte)", "size" },

这里面我所知道的仅有:
    b                             设置一个目标码率
    qscale                     设置固定的量化因子
   qmin qmax               最小和最大量化因子,使用了该参数,就可以不使用qscale参数
   bt                            设置容许的码率误差(固定误差)
   maxrate minrate     设置最大和最小码率误差(可变误差)
   bufsize                    设置码率控制的缓冲区大小

这里面要特别注意的是maxrate和minrate两个参数,他们并不是最大码率和最小码率,而是码率误差范围,最容易迷惑人的,其它的部分还请大家一起来补充,并且最好能给出一些典型的参数值!

各参数在编码时的作用

max_qdiff=3
//视频中所有桢(包括i/b/P)的最大Q值差距

max_b_frames=2
//两个非B桢之间的最大B桢数目。

qcompress=0.5
//浮点数值,表示在压制“容易压的场景”和“难压的场景”时,允许Q值之比值的变化范围。可选值是0.0-1.0。
mb_qmin=1
// MicroBlock的最小Q值
mb_qmax=31
// MicroBlock的最大Q值
pre_me=2
// 提前进行运动场景预测.
rc_eq=tex
//选择码率控制的方法。TEX是方法之一。
lmin=1
//最小拉格朗日乘数。拉格朗日乘数法(lagrange multipler)是用來檢定瞬間平均值的一种统计学方法。
lmax=5
//最大拉格朗日乘数
qmin=1
//Q值最小值
qmax=5
//Q值最大值.
qblur=0
//浮点数,表示Q值的比例随时间消减的程度,取之范围是0.0-1.0,取0就是不消减。
spatial_cplx_masking=0.3
//浮点数,表示空间复杂性的masking力度。0.0-1.0

strict_std_compliance=-1
//表示严格遵照既定标准(MPEG4等等)

me_pre_cmp=2
//运动场景预判功能的力度。数值越大编码时间越长。

rc_qsquish=1.0
//采用Qmin/Qmax的比值来限定和控制码率的方法。选1表示局部(即一个clip)采用此方法,选1表示全部采用。

rc_buffer_aggressivity=1.0
//浮点数. 表示开启解码器码流缓冲(decoder bitstream buffer)

bit_rate_tolerance=8000000
//表示有多少bit的视频流可以偏移出目前的设定.这里的"设定"是指的cbr或者vbr.

mb_decision=0
//Macroblock的判定模式.有3种,0表示采用用Macroblock比较,2表示采用失真率(rate distortion)参考,1表示选择0和2中码率需求最低的一种

b_quant_factor=1.25
//表示i/p与B的Q值比例因子,值越大B桢劣化越严重

b_quant_offset=1.25
//表示1/p与B的Q值比例的偏移量,值越大B桢劣化越严重.如果大于0,那么下一个B的Q=前一个P的Q乘以b_quant_factor再加上offset,如果小于0,则B的Q=负的normal_Q乘以factor加上offset.

i_quant_factor=0.8
//p和i的Q值比例因子,越接近1则P越优化.

i_quant_offset=0.0
//p和i的Q的偏移量

rc_strategy=2
//设定码率控制策略. 这个策略记不得了;(

b_frame_strategy=0
//B桢生成策略.(我也说不清)

luma_elim_threshold=0
//消除luma(亮度,"红楼梯")门限

chroma_elim_threshold=0
//从名字上看像是消除色度错误的门限,不理解.

dct_algo=0
//离散余弦变换算法设置,有7种预设置,包括:
0:FF_DCT_AUTO
1:FF_DCT_FASTINT,
2:FF_DCT_INT ,
3:FF_DCT_MMX ,
4:FF_DCT_MLIB,
5:FF_DCT_ALTIVEC
6:FF_DCT_FAAN
有印象好像这些与设算法是针对不同的CPU指令集作优化的,根据作压制的机器CPU来选择0-6.

lumi_masking=0.0
dark_masking=0.0
//这两个表示对过亮或过暗的场景作masking的力度.0表示不作.

https://blog.csdn.net/maoxueer/article/details/2984059

关于ffmpeg中的VBR控制相关推荐

  1. FFmpeg 中文文档

    ffmpeg的中文文档 Posted on 13 Feb 2015   ffmpegDocuments   添加评论 ffmpeg的文档,把之前三个文章直接合并而成的.没有新的内容和改动. 1. 概要 ...

  2. ffmpeg中文文档

    原文链接:https://wanglongqi.github.io/tools/2015/02/13/ffmpegcn/ ffmpeg的文档,把之前三个文章直接合并而成的.没有新的内容和改动. 1. ...

  3. 解密FFmpeg播放track mode控制

    上一篇文章(http://www.cnblogs.com/yangdanny/p/4421130.html)我们解决了在FFmpeg下如何处理H264和AAC的扩展数据,根据解出的NALU长度恢复了H ...

  4. 英特尔QSV技术在FFmpeg中的实现与使用

    本文来自英特尔资深软件工程师张华在LiveVideoStackCon 2018讲师热身分享,并由LiveVideoStack整理而成.在分享中张华介绍了英特尔GPU硬件架构,并详细解析了英特尔QSV技 ...

  5. ffmpeg中字典类型的描述

    原创:https://blog.csdn.net/ice_ly000/article/details/90599713?spm=1001.2014.3001.5501 ffmpeg中字典类型的描述: ...

  6. ffmpeg中av_log的实现分析

    [时间:2017-10] [状态:Open] [关键词:ffmpeg,avutil,av_log, 日志输出] 0 引言 FFmpeg的libavutil中的日志输出的接口整体比较少,但是功能还是不错 ...

  7. 浅析英特尔QSV技术在FFmpeg中的具体实现与使用

    本文来自英特尔资深软件工程师张华在LiveVideoStackCon 2018讲师热身分享,并由LiveVideoStack整理而成.在分享中张华介绍了英特尔GPU硬件架构,并详细解析了英特尔QSV技 ...

  8. FFmpeg中可执行文件ffplay用法汇总

    从https://ffbinaries.com/downloads 下载最新的4.1版本的windows 64位FFplay.目前linux下的只有3.2版本的.FFplay是一个由FFmpeg和SD ...

  9. FFmpeg中AVDictionary介绍

    FFmpeg中的AVDictionary是一个结构体,简单的key/value存储,经常使用AVDictionary设置或读取内部参数,声明如下,具体实现在libavutil模块中的dict.c/h, ...

最新文章

  1. 在Visual Studio中使用命令行参数进行调试
  2. 如何打开python的交互窗口-Python多版本情况下四种快速进入交互式命令行的操作技巧...
  3. Spark创建RDD的四种方式(二):从外部存储(文件)创建 RDD代码示例
  4. python性能分析工具模块_python——关于Python Profilers性能分析器
  5. LeetCode 461. 汉明距离(异或^ 与)
  6. oracle打patch,Oracle初学者入门指南-How to get Oracle Patch?
  7. mysql涉及表 规范_MySql数据库表设计规范
  8. 以太坊执行miner.start返回null终极解决方案
  9. 如何将QQ内置可爱的表情包转换为通用GIF文件
  10. 学云计算能从事什么工作 云计算就业怎么样
  11. python中如何将矩阵合并并多一个维度
  12. FeedDemon获共享软件年度大奖
  13. 餐厅点菜c语言程序代码,餐馆点菜系统C语言源代码.pdf
  14. Linux下安装JDK(rpm版)
  15. uniapp 关于swiper组件和moveable-area、moveable-view组件搭配的图片预览高度集成组件
  16. 如何提高在搜索引擎中的排名-百度排名-竞价排名-自然排名
  17. Qt写一个文档复制粘贴助手app
  18. linux aarch64启动不了,引导AArch64 Linux
  19. turtle绘制科赫雪花
  20. 从一个页面跳转到另一个页面的任何位置处

热门文章

  1. Laplacian算子
  2. lol最克制诺手的英雄_LOL5大最克制诺克的英雄 !第一名让所有小学生之手颤抖!...
  3. 达内科技十五周年记:不忘初心,方得始终
  4. 学习Go语言,这20个网站给你整理好了
  5. 做好网上商城网站建设的4个要点
  6. QMS-企业数字化转型-为什么中小型企业更应该导入质量管理软件以及比大企业更容易实现数字化转型?
  7. Android离线文字转语音(中文)
  8. wifi技术篇2----sta连入ap的过程
  9. 三星VR新专利曝光,支持悬空手势识别 1
  10. echarts 实现环形渐变