Alguna información de referencia para la compresión de video ffmpeg

Muchos amigos me preguntaron sobre  VBR en ffmpeg , principalmente sobre qué parámetros configurar y cómo configurarlos. No he investigado el VBR de ffmpeg antes, así que lo busqué en Internet y regresé sin éxito. Veré el código fuente de ffmpeg.c más adelante. Inicialmente creo que el control de VBR se puede realizar a través de los siguientes parámetros u opciones

    : b", HAS_ARG | OPT_VIDEO, {(void*)opt_video_bitrate}, "establecer tasa de bits de video (en kbit/s)", "bitrate" }, { "qscale", HAS_ARG | OPT_EXPERT | OPT_VIDEO, {(void*)opt_qscale
    } , "usar escala cuantificadora de video fija (VBR)", "q" },
    { "qmin", HAS_ARG | OPT_EXPERT | OPT_VIDEO, {(void*)opt_qmin}, "escala cuantificadora de video mínima (VBR)", "q" } ,
    { "qmax", HAS_ARG | OPT_EXPERT | OPT_VIDEO, {(void*)opt_qmax}, "escala máxima del cuantificador de video (VBR)", "q" }, { "lmin", HAS_ARG | OPT_EXPERT | OPT_VIDEO, {(void
    * )opt_lmin}, "
    { "lmáx", HAS_ARG | OPT_EXPERTO | OPT_VIDEO, {(void*)opt_lmax}, "factor de retraso de video máximo (VBR)", "lambda" },
    { "mblmin", HAS_ARG | OPT_EXPERTO | OPT_VIDEO, {(void*)opt_mb_lmin}, "escala mínima del cuantificador de macrobloques (VBR)", "q" },
    { "mblmax", HAS_ARG | OPT_EXPERTO | OPT_VIDEO, {(void*)opt_mb_lmax}, "escala máxima del cuantificador de macrobloques (VBR)", "q" },
    { "qdiff", HAS_ARG | OPT_EXPERTO | OPT_VIDEO, {(void*)opt_qdiff}, "diferencia máxima entre la escala cuantificadora (VBR)", "q" },
    { "qblur", HAS_ARG | OPT_EXPERTO | OPT_VIDEO, {(void*)opt_qblur}, "desenfoque de escala de cuantificador de video (VBR)", "desenfoque" },
    { "qsquish", HAS_ARG | OPT_EXPERTO | OPT_VIDEO, {(void*)opt_qsquish}, "cómo mantener el cuantificador entre qmin y qmax (0 = clip, 1 = usar función diferenciable)", "squish" },
    { "qcomp", HAS_ARG | OPT_EXPERTO | OPT_VIDEO, {(void*)opt_qcomp}, "compresión de escala de cuantificador de video (VBR)", "compresión" }, {
    "bt", HAS_ARG | OPT_VIDEO, {(void*)opt_video_bitrate_tolerance}, "establecer tolerancia de tasa de bits de video (en kbit/s)", "tolerancia" }, { "
    velocidad máxima", HAS_ARG | OPT_VIDEO, {(void*)opt_video_bitrate_max}, "establecer tolerancia máxima de tasa de bits de video (en kbit/s)", "tasa de bits" }, { "tasa mínima",
    HAS_ARG | OPT_VIDEO, {(void*)opt_video_bitrate_min}, "establecer tolerancia mínima de tasa de bits de video (en kbit/s)", "tasa de bits" }, { "
    bufsize", HAS_ARG | OPT_VIDEO, {(void*)opt_video_buffer_size}, "establecer el tamaño del búfer de control de velocidad (en kByte)", "tamaño" },




   qmin qmax Los factores de cuantización mínimo y máximo, con este parámetro, puede
   establecer el error de tasa de bits permitido (error fijo) sin usar el parámetro qscale bt
   maxrate minrate Establecer el error de tasa de bits máximo y mínimo (error variable)
   bufsize Establecer la tasa de bits control El tamaño del búfer

    debe prestar especial atención a los dos parámetros de tasa máxima y tasa mínima. No son la tasa de código máxima y la tasa de código mínima, sino el rango de error de la tasa de código, que es el más confuso. Agregue otras partes juntas. , y ¡es mejor dar algunos valores de parámetros típicos!

 

 

 

[转]各参数在编码时的作用

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

 

 

bit_rate 设置为 64000
bit_rate_tolerance 设置为 3000

实际输出码率最高还是会远远超过64000+3000(当输出关键祯的时候),有办法真正控制最高码率不?

 

 

ffmpeg虽然大而全,其实bug是非常多的,还有很多功能没有实现,

不如ffmpeg根本控制不住vbr的码率,

所以用ffmpeg的vbr就不用想了,除非自己修改完善

Supongo que te gusta

Origin blog.csdn.net/dongtinghong/article/details/77645052
Recomendado
Clasificación