ffmpeg/x264 码率控制 分析

ffmpeg/x264 码率控制 分析

有效影响视频码率的参数有:

一:间接影响

1.关键帧间隔

x264

 

ffmpeg

 

说明
命令行字段命令行字段

 

max-keyinti_keyint_maxggop_size

关键帧的最大间隔帧数

min-keyinti_keyint_min

 

keyint_min

关键帧的最小间隔帧数

码率∝关键帧间隔(其他参数恒定)

2分辨率

x264

 

ffmpeg

 

说明
命令行字段命令行字段

 

resize(滤镜)

i_width

-s

width

 

i_height

 

width

码率∝分辨率(其他参数恒定)

3帧率

x264

 

ffmpeg

 

说明
命令行字段命令行字段

 

fps

i_fps_num

fps

time_base.num

帧率分子/时间线分子

 

i_fps_den

 

time_base.den

帧率分母/时间线分母  

码率∝帧率(其他参数恒定)
注:    x264:i_fps_num = 15;i_fps_den= 1 ;//帧率15。

            ffmpeg:time_base.num=1;time_den=1;//帧率15。

等等视频质量的参数,无可厚非,视频质量提升,要么编码速度降低,要么码率增大。

 

4.B帧数

x264

 

ffmpeg

 

说明
命令行字段命令行字段

 

b-adapt

b_bframe_adaptiv

 

b_frame_strategy

设定弹性B帧配置决策算法。
此设定控制x264如何决定要放置P帧或B帧。
0:停用,总是挑选B帧。
1:“快速”算法,较快。
2:“最佳”算法,较慢。

bframes

i_bframe

 

max_b_frames

最大b帧数

码率∝1/b帧数(其他参数恒定)
二 直接控制

 

x264

 

ffmpeg

 

说明
字段取值字段取值

 

x264_param_t->rc 264中控制码率的结构体  

 

i_rc_method

X264_RC_CQP       0

恒定质量

X264_RC_CRF       1

恒定码率

X264_RC_ABR      2

平均码率

 

 

 

码率控制方式

i_qp_constant

恒定qp值,0代表无损压缩.

cqp

取值范围0到51。经常取值在20-40之间,越小质量越好,要求的码率越高。0表示无损压缩

固定量化因子。

i_qp_min

i_qp_max

最小qp取值。默认10

最大。默认51

qmin

qmax

取值范围0到51。经常取值在20-40之间

 

i_qp_step

 

max_qdiff

 

量化步长,即相邻两帧之间量化值之差的最大值

i_bitrate

码率值

bit_rate

码率值 
视频大小分辨率建议码率
480P720X4801800Kbps
720P1280X7203500Kbps
1080P1920X10808500Kbps

i_vbv_max_bitrate

 

 

最大瞬时码率,默认0

 

 

rc_max_rate

最大瞬时码率

 

f_rf_constant_max

是实际质量最大值

 

 

 

f_rf_constant

是实际质量,越大图像越花,越小越清晰。

 

 

 

 

未选择时,优先选择的顺序是 bitrate > QP > CRF,会按照该顺序排查参数,直到发现某种类型参数合法时确定类型。

  1. if ( bitrate )                rc_method = ABR;  
  2. else if ( qp || qp_constant ) rc_method = CQP;  
  3. else                          rc_method = CRF;      

VBR(Variable Bit Rate)即 qp,动态比特率,其码率可以随着图像的复杂程度的不同而变化,因此其编码效率比较高,Motion发生时,马赛克很少。码率控制算法根据图像内容确定使用的比特率,图像内容比较简单则分配较少的码率(似乎码字更合适),图像内容复杂则分配较多的码字,这样既保证了质量,又兼顾带宽限制。这种算法优先考虑图像质量。

 

CBR(Constant Bit Rate)即 bitrate ,是以恒定比特率方式进行编码,有Motion发生时,由于码率恒定,只能通过增大QP来减少码字大小,图像质量变差,当场景静止时,图像质量又变好,因此图像质量不稳定。这种算法优先考虑码率(带宽)。

 

CVBR(Constrained VariableBit Rate)即CRF,这样翻译成中文就比较难听了,它是VBR的一种改进方法。但是Constrained又体现在什么地方呢?这种算法对应的Maximum bitRate恒定或者Average BitRate恒定。这种方法的兼顾了以上两种方法的优点:在图像内容静止时,节省带宽,有Motion发生时,利用前期节省的带宽来尽可能的提高图像质量,达到同时兼顾带宽和图像质量的目的。同时i_bitrate也需要设置。

x264中x264_param_t->rc 结构体

/* Encoder analyser parameters */
    struct
    {
        unsigned int intra;     /* intra partitions */
        unsigned int inter;     /* inter partitions */
 
        int          b_transform_8x8;
        int          i_weighted_pred; /* weighting for P-frames */
        int          b_weighted_bipred; /* implicit weighting for B-frames */
        int          i_direct_mv_pred; /* spatial vs temporal mv prediction */
        int          i_chroma_qp_offset;
 
        int          i_me_method; /* motion estimation algorithm to use (X264_ME_*) */
        int          i_me_range; /* integer pixel motion estimation search range (from predicted mv) */
        int          i_mv_range; /* maximum length of a mv (in pixels). -1 = auto, based on level */
        int          i_mv_range_thread; /* minimum space between threads. -1 = auto, based on number of threads. */
        int          i_subpel_refine; /* subpixel motion estimation quality */
        int          b_chroma_me; /* chroma ME for subpel and mode decision in P-frames */
        int          b_mixed_references; /* allow each mb partition to have its own reference number */
        int          i_trellis;  /* trellis RD quantization */
        int          b_fast_pskip; /* early SKIP detection on P-frames */
        int          b_dct_decimate; /* transform coefficient thresholding on P-frames */
        int          i_noise_reduction; /* adaptive pseudo-deadzone */
        float        f_psy_rd; /* Psy RD strength */
        float        f_psy_trellis; /* Psy trellis strength */
        int          b_psy; /* Toggle all psy optimizations */
 
        int          b_mb_info;            /* Use input mb_info data in x264_picture_t */
        int          b_mb_info_update; /* Update the values in mb_info according to the results of encoding. */
 
        /* the deadzone size that will be used in luma quantization */
        int          i_luma_deadzone[2]; /* {inter, intra} */
 
        int          b_psnr;    /* compute and print PSNR stats */
        int          b_ssim;    /* compute and print SSIM stats */
    } analyse;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值