avcodec/avformat Количество кадров в файле

Мне нужно знать, как найти общее количество кадров в видеофайле, используя avcodec/avformat.

У меня есть проект, который я получаю от кого-то, кто использовал библиотеки ffmpeg для декодирования видеопотоков. Мне нужно модифицировать некоторые функции для поиска по кадрам, поэтому моя первая задача — просто вычислить общее количество кадров в файле. AVStream.nb_frames кажется разумным местом для поиска, но это всегда 0 со всеми видеофайлами, которые я пробовал. Является ли вывод общего количества кадров из AVFormatContex.duration лучшим способом?


person rcv    schedule 22.12.2009    source источник


Ответы (1)


Единственный способ найти точное количество кадров — просмотреть их все и сосчитать. Я беспокоился об этом много раз, пробовал много разных инструментов (включая ffmpeg) и много читал. Извините, но в общем случае по-другому нельзя. Некоторые форматы просто не хранят эту информацию, так что приходится считать.

person balpha    schedule 22.12.2009
comment
Является ли вычисление количества кадров из AVFormatContext.duration приемлемым подходом, или это так же шатко, как и nb_frames? - person rcv; 22.12.2009
comment
Это хороший подход, но не ожидайте, что вы декодируете точно такое же количество кадров, когда вы их действительно декодируете. Чем длиннее видео, тем больше, вероятно, будет отклонение. Также помните, что поиск может быть таким же ненадежным - если у вас нет индекса (либо созданного вами, опять же, путем предварительного просмотра файла, либо предоставленного форматом контейнера), почти невозможно сказать, что мне нужен номер кадра 96215. - person balpha; 22.12.2009