x264 num_units_in_tick не может быть правильно установлен - PullRequest
2 голосов
/ 01 февраля 2012

Когда я использую x264 lib для кодирования видеопотока yuv, я не могу установить параметр sps num_units_in_tick (i_num_units_in_tick в структуре). Я инициализирую x264_param_t как:

    x264_param_t*                     m_x264Param;

    if( x264_param_default_preset( m_x264Param, "superfast", "zerolatency" ) < 0 )
    return -1;

   x264_param_apply_fastfirstpass( m_x264Param );

    /* Apply profile restrictions. */
    //baseline
    if( x264_param_apply_profile( m_x264Param, "baseline" ) < 0 )
      return -1;

i_rc_method установлен в 1. Я устанавливаю параметры, которые определяют num_units_in_tick, затем вызываю x264_encoder_open, чтобы получить x264_t.

    m_x264Param->i_timebase_den = 90000;
    m_x264Param->i_timebase_num = 3000;
    m_x264Param->i_fps_num = 60;
    m_x264Param->i_fps_den = 2;

Но num_units_in_tick по-прежнему равен 1, а time_scale по-прежнему равен 60. Как установить для num_units_in_tick значение 3000, чтобы один кадр занимал 3000 единиц времени?

1 Ответ

2 голосов
/ 03 мая 2012

На самом деле параметры vui_parameters имеют скорость FIELD, а не частоту кадров.

Возможно, ваш фреймворк основан на i_fps_num вместо i_timebase_den. Посмотрите, делает ли ваш FPS 90000/3000 то, что вы хотите. Эти 4 значения численно запутаны и могут быть указаны только с двумя числами.

Кроме того, если ваша структура упрощает ваши дроби, вам совершенно не повезло.

...