Ключевые кадры чтения FFMPEG

Я пытаюсь написать программу на С++, которая будет считывать ключевые кадры из видеофайла с помощью ffmpeg. Пока мне удалось получить все кадры, используя av_read_frame, где вы последовательно читаете кадр за кадром.

Но у меня возникли некоторые проблемы с использованием av_seek_frame, который (если я прав) должен делать трюк для ключевых кадров.

int av_seek_frame(AVFormatContext *s, int stream_index, int64_t timestamp, int flags);

У меня есть FormatContext, но каковы другие правильные аргументы для последовательного получения только всех ключевых кадров?

Есть ли другая функция, которую я могу использовать вместо этого?

Спасибо

РЕДАКТИРОВАТЬ: В av_read_frame я получаю AVPacket, который я могу использовать для получения данных кадра, но как я могу получить пакет с помощью av_seek_frame?

РЕШЕНИЕ: ОК, в AVFrame->key_frame есть простое логическое значение. Правда, если это ключевой кадр


person kirbo    schedule 11.06.2011    source источник
comment
Какие именно проблемы у вас возникли с av_seek_frame()?   -  person karlphillip    schedule 11.06.2011


Ответы (1)


av_seek_frame имеет возможность искать определенную метку времени в видеофайл. Он принимает 4 параметра: указатель на AVFormatContext, индекс потока, метку времени для поиска и флаги. для выбора направления и режима поиска.

Затем функция будет искать первый ключевой кадр перед заданной отметкой времени.

Дополнительную информацию см. в документации по этой функции.

person karlphillip    schedule 11.06.2011
comment
По моему опыту, он ищет первый ключевой кадр после заданной отметки времени. И нужно иметь в виду, что libav ищет в DTS, а не в PTS. - person Roman Kruglov; 27.03.2013