Warum meldet ffprobe eine falsche Anzahl von Frames?

1526
Skeeve

Ich habe eine kleine Videodatei, die ffprobe beschreibt als: -

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  

Da das Video 35 Sekunden lang ist. lang, und mit einer Bildrate von 200 Bildern pro Sekunde würde ich davon ausgehen, dass das Video (35 x 200) = 7000 Bilder enthalten würde.

Wenn ich mit ffmpeg tatsächlich Frame-Bilder aus dem Video extrahiere, bekomme ich eigentlich 6999 Bilder (nahe genug, denke ich). Der Befehl, den ich dafür benutze, lautet:

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

Hinweis: Das '%%' ist erforderlich, wenn der Befehl von der WinXP-CLI aus ausgeführt wird

Verwenden Sie jedoch den Befehl: -

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

und zu zählen, wie viele [FRAME] -Elemente in frames sind. lis ergibt eine Frame-Anzahl von 1023 Frames und nicht 7000.

Irgendeine erklärung?

Hier ist ein Link zu einer sehr ähnlichen Datei, die sich auf dieselbe Weise verhält (~ 7 MB):

http://www.filedropper.com/sample_65 

Klicken Sie mit der linken Maustaste auf das Bild "Diese Datei herunterladen" auf der Seite.

Ich verwende 17APR2014 statischen Win32-Build von ffmpeg 'ffprobe' unter WinXP-SP3.

Wenn es einen anderen Weg gibt, versuche ich hauptsächlich, eine Tabelle mit "Bildnummer" im Vergleich zu "Zeit" für eine Reihe von Videodateien zur Verwendung in einer anderen Anwendung zu erstellen.

Vielen Dank.

3
Kannst du ein Videobeispiel teilen? Beachten Sie, dass die Dauer nicht immer genau sein muss. slhck vor 10 Jahren 0
Haben Sie einen Link zu einer .avi-Beispieldatei im Beitrag hinzugefügt. Skeeve vor 10 Jahren 0
Für andere, die das gleiche Problem hatten, erhielt @Skeeve Antworten auf der FFmpeg-Mailingliste: https://ffmpeg.org/pipermail/ffmpeg-user/2014-May/021318.html Ich bin mir nicht sicher, ob es mein Problem vollständig löst. Gauthier vor 7 Jahren 0

1 Antwort auf die Frage

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.