x264设置默认参数

来源:互联网 发布:王者荣耀代练接单软件 编辑:程序博客网 时间:2024/05/19 23:58

x264通过代码设置默认参数


void x264_param_default( x264_param_t *param ){    /* */    memset( param, 0, sizeof( x264_param_t ) );    /* CPU autodetect */    /* 自动检测cpu的数量     */    param->cpu = x264_cpu_detect();    /*  自动设置线程的数量     */    param->i_threads = X264_THREADS_AUTO;    /* 自动设置向前看线程的数量     */    param->i_lookahead_threads = X264_THREADS_AUTO;    /* 使用与cpu相关的非确定性优化     */    param->b_deterministic = 1;    /* 前向缓存的帧的数量     */    param->i_sync_lookahead = X264_SYNC_LOOKAHEAD_AUTO;    /* Video properties */    /* 默认是I420(YUV420)     */    param->i_csp           = X264_CHROMA_FORMAT ? X264_CHROMA_FORMAT : X264_CSP_I420;    param->i_width         = 0;    param->i_height        = 0;    param->vui.i_sar_width = 0;    param->vui.i_sar_height= 0;    /* 过扫描未定义     */    param->vui.i_overscan  = 0;  /* undef */    param->vui.i_vidformat = 5;  /* undef */    param->vui.b_fullrange = -1; /* default depends on input */    param->vui.i_colorprim = 2;  /* undef */    param->vui.i_transfer  = 2;  /* undef */    param->vui.i_colmatrix = -1; /* default depends on input */    param->vui.i_chroma_loc= 0;  /* left center */    /* fps默认是25     */    param->i_fps_num       = 25;    param->i_fps_den       = 1;    param->i_level_idc     = -1;    /* 默认不使用slice(即一个frame只有一个slice)     */    param->i_slice_max_size = 0;    param->i_slice_max_mbs = 0;    param->i_slice_count = 0;    /* Encoder parameters */    /* 默认参考帧的数量 3     */    param->i_frame_reference = 3;    /* GOPsize的大小 250     */    param->i_keyint_max = 250;    /* keyint_min 默认是0     */    param->i_keyint_min = X264_KEYINT_MIN_AUTO;    /* 默认B帧数量 3     */    param->i_bframe = 3;    /* 判断场景切换的阈值:40     */    param->i_scenecut_threshold = 40;    /* 自适应的B帧判断:true     */    param->i_bframe_adaptive = X264_B_ADAPT_FAST;    /* B帧代替P帧的概率(从-100到100),默认是0,表示比较平衡     */    param->i_bframe_bias = 0;    /* 是否允许B帧也做为参考帧:normal(不允许)     */    param->i_bframe_pyramid = X264_B_PYRAMID_NORMAL;    /* 不使用场编码,只使用帧编码     */    param->b_interlaced = 0;    /* 不强迫进行帧内预测     */    param->b_constrained_intra = 0;    /* 使用去方块滤波     */    param->b_deblocking_filter = 1;    /* 去方块滤波的参数都是0     */    param->i_deblocking_filter_alphac0 = 0;    param->i_deblocking_filter_beta = 0;    /* 使用cabac作为熵编码算法     */    param->b_cabac = 1;    param->i_cabac_init_idc = 0;    /* 使用CRF作为默认的熵编码算法     */    param->rc.i_rc_method = X264_RC_CRF;    /* 比特率,这里没有设置     */    param->rc.i_bitrate = 0;    /* 允许的平均码率误差     */    param->rc.f_rate_tolerance = 1.0;    /* 平均码率下,最大的瞬时码率     */    param->rc.i_vbv_max_bitrate = 0;    /* 码率控制缓冲区的大小     */    param->rc.i_vbv_buffer_size = 0;    /* 设置码率控制缓冲区(VBV)缓冲达到多满(百分比),才开始播放,0.9     */    param->rc.f_vbv_buffer_init = 0.9;    /* P帧的量化值     */    param->rc.i_qp_constant = 23 + QP_BD_OFFSET;    /* 实际的质量     */    param->rc.f_rf_constant = 23;    param->rc.i_qp_min = 0;    param->rc.i_qp_max = QP_MAX;    /* 量化步长,相邻两帧的量化值的最大差值,4     */    param->rc.i_qp_step = 4;    /* I帧P帧间的量化因子比值     */    param->rc.f_ip_factor = 1.4;    /* P帧和B帧间的量化因子的比值     */    param->rc.f_pb_factor = 1.3;    /* 自适应的量化模式,开启     */    param->rc.i_aq_mode = X264_AQ_VARIANCE;    /* 自适应量化的强度 1.0     */    param->rc.f_aq_strength = 1.0;    /* 决定mbtree向前预测的帧数 40     */    param->rc.i_lookahead = 40;    param->rc.b_stat_write = 0;    param->rc.psz_stat_out = "x264_2pass.log";    param->rc.b_stat_read = 0;    param->rc.psz_stat_in = "x264_2pass.log";    /* 量化曲线压缩参数,会影响mbtree的强度,0.0表示恒定比特率,1.0表示恒定QP     * 更高的值表示更弱的mbtree,qcomp=1.0时,mbtree=0     * 默认是0.6     */    param->rc.f_qcompress = 0.6;    /* 时间上模糊量化,减少QP的波动     * 默认0.5,仅用于2pass的第二遍     */    param->rc.f_qblur = 0.5;    /* 把给定的值作为高斯模糊的半径,应用到量化曲线上,这意味着分配给帧的QP会被它附近的帧的QP平均掉     * 这样会达到限制QP波动的效果     * 默认是20,仅用于2pass的第二遍     */    param->rc.f_complexity_blur = 20;    param->rc.i_zones = 0;    /* 默认开启mbtree     */    param->rc.b_mb_tree = 1;    /* Log */    param->pf_log = x264_log_default;    param->p_log_private = NULL;    param->i_log_level = X264_LOG_INFO;    /* */    /* 帧内分析:4x4、8x8     */    param->analyse.intra = X264_ANALYSE_I4x4 | X264_ANALYSE_I8x8;    /*帧间分析:4x4、8x8,P16x16,B16x16     */    param->analyse.inter = X264_ANALYSE_I4x4 | X264_ANALYSE_I8x8                         | X264_ANALYSE_PSUB16x16 | X264_ANALYSE_BSUB16x16;    /* 默认使用空间的direct mv预测     */    param->analyse.i_direct_mv_pred = X264_DIRECT_PRED_SPATIAL;    /* 默认使用HEX作为运动搜索算法     */    param->analyse.i_me_method = X264_ME_HEX;    /* Psy优化强度,可以增强细节     * 默认是1.0     */    param->analyse.f_psy_rd = 1.0;    /* 使用Psy优化     */    param->analyse.b_psy = 1;    /* Psy Trellis强度。默认是0     */    param->analyse.f_psy_trellis = 0;    /* 运动搜索的范围,默认16     */    param->analyse.i_me_range = 16;    /* 亚像素运动估计的质量(精度)     */    param->analyse.i_subpel_refine = 7;    /* 是否允许每个宏块的分区有自己的参考编号,允许     */    param->analyse.b_mixed_references = 1;    /* 使用 亚像素色度运动估计和P帧的模式选择     */    param->analyse.b_chroma_me = 1;    /* 线程之间的最小运动向量缓存,编码器自动设置     */    param->analyse.i_mv_range_thread = -1;    /* 运动向量的取值范围,由level决定     */    param->analyse.i_mv_range = -1; // set from level_idc    /* 色度量化步长的偏移量,0     */    param->analyse.i_chroma_qp_offset = 0;    /* 快速P帧跳过检测,开启     */    param->analyse.b_fast_pskip = 1;    /* B帧的权值是隐式的还是显示的,隐式的     */    param->analyse.b_weighted_bipred = 1;    /* 权重预测中,P帧的权值,2     */    param->analyse.i_weighted_pred = X264_WEIGHTP_SMART;    /* P帧变换系数阈值,1     */    param->analyse.b_dct_decimate = 1;    /* 使用8x8的DCT变换     */    param->analyse.b_transform_8x8 = 1;    /* 使用trellis优化,可以提高图像质量     * Trellis量化提高效率,对每个8x8的块寻找合适的量化值,需要CABAC,     * 0 :即关闭  1:只在最后编码时使用  2:在所有模式决策上启用     */    param->analyse.i_trellis = 1;    /* 亮度盲区的尺寸     */    param->analyse.i_luma_deadzone[0] = 21;    param->analyse.i_luma_deadzone[1] = 11;    param->analyse.b_psnr = 0;    param->analyse.b_ssim = 0;    /* 自定义的量化矩阵,默认是flat     */    param->i_cqm_preset = X264_CQM_FLAT;    /* 量化矩阵,只有i_cqm_preset是custom时,才有效     */    memset( param->cqm_4iy, 16, sizeof( param->cqm_4iy ) );    memset( param->cqm_4py, 16, sizeof( param->cqm_4py ) );    memset( param->cqm_4ic, 16, sizeof( param->cqm_4ic ) );    memset( param->cqm_4pc, 16, sizeof( param->cqm_4pc ) );    memset( param->cqm_8iy, 16, sizeof( param->cqm_8iy ) );    memset( param->cqm_8py, 16, sizeof( param->cqm_8py ) );    memset( param->cqm_8ic, 16, sizeof( param->cqm_8ic ) );    memset( param->cqm_8pc, 16, sizeof( param->cqm_8pc ) );    /* 是否复制sps和pps放在每个关键帧的前面,默认是true     */    param->b_repeat_headers = 1;    /* nalu是否符合标准     * 值为true,则NALU之前是4字节前缀码0x00000001;值为false,则NALU之前的4个字节为NALU长度     */    param->b_annexb = 1;    /* 是否生成nalu分隔符,不产生     */    param->b_aud = 0;    /* VFR输入。1 :时间基和时间戳用于码率控制  0 :仅帧率用于码率控制     */    param->b_vfr_input = 1;    /* 验编码器产生的符合该标准的NAL单元流或字节流的偏差值。蓝光视频、电视广播及其它特殊领域有此要求     */    param->i_nal_hrd = X264_NAL_HRD_NONE;    param->b_tff = 1;    /* 强制在Picture Timing SEI传送pic_struct. 默认是未开启     */    param->b_pic_struct = 0;    /* 将视频流标记为交错(隔行),哪怕并非为交错式编码。可用于编码蓝光兼容的25p和30p视频。默认是未开启     */    param->b_fake_interlaced = 0;    /* 编码3D视频时,此参数在码流中插入一个标志,告知解码器此3D视频是如何封装的     */    param->i_frame_packing = -1;    param->b_opencl = 0;    param->i_opencl_device = 0;    param->opencl_device_id = NULL;    param->psz_clbin_file = NULL;}


原创粉丝点击