FFmpeg. Извлечение кадров по времени
Я никогда до сих пор не пользовался FFmpeg, и только начал изучать её. В туториале показано как извлекать один кадр за другим. Но меня итересует максимально быстрый способ извлечения нужного кадра по времени (очень желательно двунаправленно). Можно ли получить что-то типа AVFrameContext (я его выдумал), т.е. без выделения памяти для самого кадра до тех пор, пока не найдётся нужный? Т.е. нужно найти по миллисекундам, что время попадает между prev_frame и next_frame, и тогда достать cur_frame. Подскажите, пожалуйста, как это можно реализовать (с помощью каких функций, структур и т.п.)? Большое спасибо.
Ответы (1 шт):
Нашёл: FFmpeg Docs или Libav Docs
int av_seek_frame(AVFormatContext *s,
int stream_index,
int64_t timestamp,
int flags)
Seek to the keyframe at timestamp.
Ищет по времени [предшествующий] [ключевой] кадр внутри указанного индекса AVStream.
Флаги можно найти тут:
- AVSEEK_FLAG_BACKWARD
- AVSEEK_FLAG_BYTE
- AVSEEK_FLAG_ANY
- AVSEEK_FLAG_FRAME
Вот здесь объясняется как пользоваться флагами.