关于ffmpeg中的VBR控制 ffmpeg 音量控制

时间:2009-05-14 00:50来源:网络博客 作者:ixmy点击:1459次

最近在做中国电信的一个3G视频项目(VAU),中间需要将DVR的视频压缩成适合在3G手机上看的小格式,并利用RTP来进行传输,但在压缩时发现常常会出现压缩不均匀的状况,后来发现跟码流类型有一定关系,于是就找到了这篇文章。现拿出来跟大家一起共享。

收藏到:

TAG: FFMPEG编码EncodeCBRVBR

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

{ "b", HAS_ARG | OPT_VIDEO, {(void*)opt_video_bitrate}, "setvideo bitrate (in kbit/s)", "bitrate" },

{ "qscale", HAS_ARG |OPT_EXPERT | OPT_VIDEO, {(void*)opt_qscale}, "use fixed video quantiserscale (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 videoquantiser 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}, "minmacroblock quantiser scale (VBR)", "q" },

{ "mblmax", HAS_ARG |OPT_EXPERT | OPT_VIDEO, {(void*)opt_mb_lmax}, "max macroblock quantiserscale (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}, "howto keep quantiser between qmin and qmax (0 = clip, 1 = usedifferentiable function)", "squish" },

{ "qcomp", HAS_ARG |OPT_EXPERT | OPT_VIDEO, {(void*)opt_qcomp}, "video quantiser scalecompression (VBR)", "compression" },

{ "bt", HAS_ARG | OPT_VIDEO,{(void*)opt_video_bitrate_tolerance}, "set video bitrate tolerance (inkbit/s)", "tolerance" },

{ "maxrate", HAS_ARG | OPT_VIDEO,{(void*)opt_video_bitrate_max}, "set max video bitrate tolerance (inkbit/s)", "bitrate" },

{ "minrate", HAS_ARG | OPT_VIDEO,{(void*)opt_video_bitrate_min}, "set min video bitrate tolerance (inkbit/s)", "bitrate" },

{ "bufsize", HAS_ARG | OPT_VIDEO,{(void*)opt_video_buffer_size}, "set ratecontrol buffer size (inkByte)", "size" },

这里面我所知道的仅有:

b 设置一个目标码率

qscale 设置固定的量化因子

qmin qmax最小和最大量化因子,使用了该参数,就可以不使用qscale参数

bt 设置容许的码率误差(固定误差)

maxrate minrate设置最大和最小码率误差(可变误差)

bufsize 设置码率控制的缓冲区大小

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

各参数在编码时的作用

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

//最小拉格朗日乘数。拉格朗日乘数法(lagrangemultipler)是用來檢定瞬間平均值的一种统计学方法。

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等等)
关于ffmpeg中的VBR控制 ffmpeg 音量控制

me_pre_cmp=2

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

rc_qsquish=1.0

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

rc_buffer_aggressivity=1.0

//浮点数. 表示开启解码器码流缓冲(decoder bitstreambuffer)

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表示不作.

  

爱华网本文地址 » http://www.413yy.cn/a/25101011/78538.html

更多阅读

关于FlashPlayer8中的安全设置 如何设置flash player

一般情况下,从本地文件系统运行的Flash程序和通过信任的Web上下载的swf、flv的内容都可正常播放。但有时会碰到下载的swf、flv内容会出现一个如下的提示框此框提醒用户所使用的 swf 或 flv内容正在尝试从其所在域外部(国外)的站点访

转载 关于BOLL-M和BBIBOLL在实战中的比对秋实原创系列 王秋实

原文地址:关于BOLL-M和BBIBOLL在实战中的比对(秋实原创系列)作者:秋实一般平时常用指标BOLL-M布林线-主图叠加指标和BBIBOLL多空指标BBI和布林线叠加比对来分析股票,而且盘中30分钟比较有效,特别是对于BBIBOLL的观察有些心得。BBIBOLL的用

声明:《关于ffmpeg中的VBR控制 ffmpeg 音量控制》为网友现实太现实分享!如侵犯到您的合法权益请联系我们删除