Почему ffprobe сообщает неверное количество кадров?

1496
Skeeve

У меня есть небольшой видеофайл, который ffprobe описывает как:

Input #0, avi, from 'sample.avi':  Metadata:  encoder : Lavf55.12.100  Duration: 00:00:35.00, start: 0.000000, bitrate: 546 kb/s  Stream #0:0: Video: msmpeg4v3 (MP43 / 0x3334504D), yuv420p, 320x240,  506 kb/s, 200 fps, 200 tbr, 200 tbn, 200 tbc  

Как видео 35 сек. долго, и с частотой кадров 200 кадров в секунду, я ожидаю, что будет (35 х 200) = 7000 кадров в видео.

Если я использую ffmpeg для фактического извлечения кадров из видео, я на самом деле получаю 6999 изображений (я полагаю, достаточно близко). Команда, которую я использую для этого:

c:\> ffmpeg -i sample.avi -f image2 -c:v png Img%%04d.png 

Примечание: «%%» требуется, когда команда запускается из интерфейса командной строки WinXP

Тем не менее, с помощью команды: -

c:\> ffprobe -select_streams v -show_frames sample.avi > frames.lis 

и подсчет количества элементов [FRAME] в frames.lis дает количество кадров 1023 кадра, а не 7000.

Любое объяснение?

Вот ссылка на очень похожий файл, который ведет себя таким же образом (~ 7 МБ):

http://www.filedropper.com/sample_65 

Щелкните левой кнопкой мыши изображение «Загрузить этот файл» на странице.

Я использую 17APR2014 статическую сборку Win32 для ffmpeg 'ffprobe' под WinXP-SP3.

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

Благодарю.

3
Можете ли вы поделиться примером видео? Обратите внимание, что продолжительность не всегда должна быть точной. slhck 10 лет назад 0
Добавили ссылку на образец файла .avi в публикации. Skeeve 10 лет назад 0
Для других с такой же проблемой @Skeeve получил ответы в списке рассылки FFmpeg: https://ffmpeg.org/pipermail/ffmpeg-user/2014-May/021318.html Не уверен, что это полностью решает мою проблему. Gauthier 7 лет назад 0

1 ответ на вопрос

1
dstob

Is there a reason 1023 cannot be correct? The fps you are referring to is header info and so it can easily be incorrect.

In the output of the png's, are there a lot of duplicate frames? Ffmpeg may be doing you a favor and outputting copied frames to match the reported fps and duration.

Using ffprobe is my recommended solution. It's difficult to be certain 100% of the time unless you are actually decoding the frames and counting. So using -count_frames or -show_frames should give you the number you are looking for.

Note: There is no guarantee that the duration listed is accurate.