Как я могу заставить текущий кадр кодироваться как внутрикадровый с помощью libavcodec

#ffmpeg #h.264 #libavcodec

Вопрос:

Я хочу изменить динамику gop, чтобы адаптироваться к игроку. Меньшая gop помогает снизить стоимость первого экрана; Большая gop помогает снизить битрейт для экономии пропускной способности.

Я обнаружил, что в nvenc есть функция, которая может решить описанную выше проблему. https://docs.nvidia.com/video-technologies/video-codec-sdk/nvenc-video-encoder-api-prog-guide/#forcing-current-frame-to-be-encoded-as-intra-frame

Но я использую ffmpeg. Есть ли какая-либо аналогичная функция в ffmpeg?

Ответ №1:

Если AVFrame->pict_type установлено значение AV_PICTURE_TYPE_I , то кодеры NVENC по умолчанию будут кодировать его как внутрикадровый. У них также есть частная возможность принудительно использовать его в качестве фрейма IDR.

Для последнего добавьте перед открытием кодировщика.

 av_opt_set(avctx->priv_data, "forced_idr", "1", 0);