Настройки AVCodecContext для H264 (1080i) - PullRequest
2 голосов
/ 13 декабря 2011

Я пытаюсь настроить x264 для захвата 1080i. Большинство из приведенных ниже настроек находятся в разных примерах. Однако, собранные вместе, они не работают. API ffmpeg не сообщает об ошибке, но avcodec_encode_video() всегда возвращает ноль.

Некоторые цифры странные для меня ... например, gop_size. Разве 250 не слишком высоко?

Если вы не можете предложить окончательный ответ, я все еще заинтересован в любых комментариях на эту тему.

pCodecContext->codec_type              = AVMEDIA_TYPE_VIDEO;
pCodecContext->codec_id                = CODEC_ID_H264;

pCodecContext->coder_type              = FF_CODER_TYPE_AC;
pCodecContext->flags                  |= CODEC_FLAG_LOOP_FILTER | CODEC_FLAG_INTERLACED_ME | CODEC_FLAG_INTERLACED_DCT;
pCodecContext->me_cmp                 |= 1;
pCodecContext->partitions             |= X264_PART_I8X8 | X264_PART_I4X4 | X264_PART_P8X8 | X264_PART_B8X8;
pCodecContext->me_method               = ME_UMH;
pCodecContext->me_subpel_quality       = 8;
pCodecContext->me_range                = 16;

pCodecContext->bit_rate                = 10 * 1024 * 1024; // 10 Mbps??
pCodecContext->width                   = 1920;
pCodecContext->height                  = 1080;

pCodecContext->time_base.num           = 1;    // 25 fps
pCodecContext->time_base.den           = 25;   // 25 fps

pCodecContext->gop_size                = 250; // 250
pCodecContext->keyint_min              = 25;
pCodecContext->scenechange_threshold   = 40;
pCodecContext->i_quant_factor          = 0.71f;
pCodecContext->b_frame_strategy        = 1;
pCodecContext->qcompress               = 0.6f;
pCodecContext->qmin                    = 10;
pCodecContext->qmax                    = 51;
pCodecContext->max_qdiff               = 4;
pCodecContext->max_b_frames            = 3;
pCodecContext->refs                    = 4;
pCodecContext->directpred              = 3;
pCodecContext->trellis                 = 1;
pCodecContext->flags2                 |= CODEC_FLAG2_WPRED | CODEC_FLAG2_MIXED_REFS | CODEC_FLAG2_8X8DCT | CODEC_FLAG2_FASTPSKIP;  // wpred+mixed_refs+dct8x8+fastpskip
pCodecContext->weighted_p_pred         = 2; // not implemented with interlaced ??
pCodecContext->crf                     = 22;

pCodecContext->pix_fmt                 = PIX_FMT_YUV420P;

pCodecContext->thread_count            = 0;

Ответы [ 2 ]

0 голосов
/ 25 января 2012

Вы должны стараться избегать установки любых параметров x264 самостоятельно; сама библиотека знает лучше, и вы получите плохие настройки только после чтения старого исходного кода. Используйте API AVOption, чтобы установить для параметров «preset» / «tune» / «profile» на кодере то, что вам нужно (см. x264 --help).

0 голосов
/ 17 декабря 2011

Вы можете проанализировать некоторые существующие видеофайлы 1080i h264, чтобы увидеть их параметры. Мне показались полезными ссылки:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...