如何使用x264实现2遍编码?

时间:2013-05-16 19:20:21

标签: c++ h.264 video-processing x264 libx264

x264_param_t结构中是否有参数 或者我必须将帧发送到x264 dll两次..? 因为我只使用encoder_encode函数并返回nal单位。 我猜它应该是一个参数和两次使用encoder_encode的组合。

以下是我如何初始化params并链接到libx264

    InitializeSettings(){
    x264_param_default_preset(&m_pXParam, "medium", "zerolatency");
    x264_param_apply_profile(&m_pXParam, "baseline");
    m_pXParam.i_width = cx;
    m_pXParam.i_height = cy;
    m_pXParam.i_fps_num = fps;
    m_pXParam.i_fps_den = 1;
    // rate control
    m_pXParam.i_keyint_max = fps - 5;
    //m_pXParam.rc.f_rf_constant_max = fps + 5;
    // rate control
    m_pXParam.rc.i_qp_constant=18;
    m_pXParam.rc.i_qp_min=18;
    m_pXParam.rc.i_qp_max=18;}

    x264_picture_alloc(&m_xPicture, X264_CSP_I420 , m_pXParam.i_width, m_pXParam.i_height);
    m_xPicture.img = x264img;
    m_iframe_size = x264_encoder_encode(m_xEncoder, &m_xNals, &m_iNal, &m_xPicture, &m_xPictureOut);  

@ nobody555谢谢!我有另外一个关于x264_param_apply_fastfirstpass函数的问题:

/* x264_param_apply_fastfirstpass:
 *      If first-pass mode is set (rc.b_stat_read == 0, rc.b_stat_write == 1),
 *      modify the encoder settings to disable options generally not useful on
 *      the first pass. */

他们在谈论什么选择?

1 个答案:

答案 0 :(得分:1)

要进行2pass编码,您需要通过libx264两次传递所有视频。首先使用param.rc.b_stat_write = 1并使用param.rc.b_stat_read = 1进行第二次传递。如果您不想使用默认值,也可以指定stats文件名param.rc.psz_stat_out / param.rc.psz_stat_in “x264_2pass.log”。