音视频技术ijkplayer秘籍IOS ffmpeg

ffmpeg&x264 码率控制分析

2016-03-25  本文已影响2366人  Don_

相关

ffmpeg编码示例
x264编码示例

概念

h264编码算法复杂、参数众多,单码率控制又分为三种模式。

码率控制

间接影响

除了视频质量外有效影响视频码率的有


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


码率∝分辨率(视频质量其他参数恒定)


码率∝帧率(视频质量其他参数恒定)
注:
x264:i_fps_num = 15;i_fps_den= 1 ;//帧率15。
ffmpeg:time_base.num=1;time_den=1;//帧率15。
等等视频质量的参数,无可厚非,视频质量提升,要么编码速度降低,要么码率增大。

码率∝1/b帧数(视频质量其他参数恒定)

直接影响


X264_RC_CQP 动态比特率
X264_RC_CRF 恒定比特率
X264_RC_ABR 平均比特率
未选择时,优先选择的顺序是 bitrate > QP > CRF,会按照该顺序排查参数,直到发现某种类型参数合法时确定类型。
if( bitrate ) rc_method = ABR; else if ( qp || qp_constant ) rc_method = CQP; else rc_method = CRF;

附:

x264中x264_param_t->rc 结构体

struct
{
    int         i_rc_method;    /* X264_RC_* */

    int         i_qp_constant;  /* 0 to (51 + 6*(x264_bit_depth-8)). 0=lossless */
    int         i_qp_min;       /* min allowed QP value */
    int         i_qp_max;       /* max allowed QP value */
    int         i_qp_step;      /* max QP step between frames */

    int         i_bitrate;
    float       f_rf_constant;  /* 1pass VBR, nominal QP */
    float       f_rf_constant_max;  /* In CRF mode, maximum CRF as caused by VBV */
    float       f_rate_tolerance;
    int         i_vbv_max_bitrate;
    int         i_vbv_buffer_size;
    float       f_vbv_buffer_init; /* <=1: fraction of buffer_size. >1: kbit */
    float       f_ip_factor;
    float       f_pb_factor;

    /* VBV filler: force CBR VBV and use filler bytes to ensure hard-CBR.
     * Implied by NAL-HRD CBR. */
    int         b_filler;

    int         i_aq_mode;      /* psy adaptive QP. (X264_AQ_*) */
    float       f_aq_strength;
    int         b_mb_tree;      /* Macroblock-tree ratecontrol. */
    int         i_lookahead;

    /* 2pass */
    int         b_stat_write;   /* Enable stat writing in psz_stat_out */
    char        *psz_stat_out;  /* output filename (in UTF-8) of the 2pass stats file */
    int         b_stat_read;    /* Read stat from psz_stat_in and use it */
    char        *psz_stat_in;   /* input filename (in UTF-8) of the 2pass stats file */

    /* 2pass params (same as ffmpeg ones) */
    float       f_qcompress;    /* 0.0 => cbr, 1.0 => constant qp */
    float       f_qblur;        /* temporally blur quants */
    float       f_complexity_blur; /* temporally blur complexity */
    x264_zone_t *zones;         /* ratecontrol overrides */
    int         i_zones;        /* number of zone_t's */
    char        *psz_zones;     /* alternate method of specifying zones */
} rc;
上一篇下一篇

猜你喜欢

热点阅读