Warum extrahiert ffmpeg viel mehr Frames als das eigentliche?

393
simar

Ich verwende ffmpeg, um Frames aus einer GIF-Datei zu extrahieren. Wenn ich Python PIL verwende, zeigt es an, dass die Datei 135 Frames hat. Selbst das Eigenschaftenfenster im Mac hat die gleiche Anzahl von Frames. Ffmpeg extrahiert jedoch aus irgendeinem Grund> 50000 Frames. Viele von ihnen sind Duplikate.

GIF-Datei - https://78.media.tumblr.com/dd7f01acad444ca85bea050afd15afaf/tumblr_nof6lmxQLC1utshuoo1_250.gif

Ich verwende den folgenden Befehl: ffmpeg -i input_gif.gif output /% d.jpg Log - https://pastebin.com/HBt58yKq

Ich habe jedoch festgestellt, dass der folgende Befehl einwandfrei funktioniert. Ffmpeg -i input_gif.gif -vsync 0 output /% d.jpg Log - https://pastebin.com/Ykb7WkKA

0

1 Antwort auf die Frage

2
Gyan

Es wird erkannt, dass die GIF eine Bildfrequenz von 6,67 aufweist, aber die einzelnen Bildverzögerungen werden auf 65535 in Einheiten von 1/100 Sekunde eingestellt, also 655,35 Sekunden pro Bild. Dies ergibt eine Gesamtdauer von mehr als 24 Stunden für 135 Eingangsrahmen.

Der Bildsequenzmuxer wird auf den Modus mit konstanter Bildrate eingestellt. Daher prüft ffmpeg die Framerate der Eingabe (6,67 fps) und verwirft oder kopiert Frames, um diese Rate abzugleichen, wenn die Eingabe eine andere Anzahl von Frames (pro Sekunde) liefert. Beim Wiederherstellen einer 24-Stunden-Ausgabesequenz bei 6,67 fps versucht ffmpeg also, über 500.000 Bilder zu erzeugen. Fast alle davon werden Duplikate sein.

-vsync vfroder -vsync 0deaktiviert das Frame Drop / Dup-Verhalten.

1. Warum sind die einzelnen Frame-Verzögerungen ungültig? 2. Warum setzt ffmpeg diesen seltsamen Wert, der viele doppelte Frames erzeugt? Sollte es nicht klüger sein? 3. Bedeutet das, dass das GIF beim Erstellen ein Problem darstellt? Ich kann also -vsync 0 sicher für alle meine Dateien verwenden (sowohl gültig als auch ungültig). simar vor 5 Jahren 0
Ich habe meine Antwort geändert. 1 & 2. Die Verzögerungen sind maximal, was auf eine fehlerhafte GIF-Erstellung hinweist. 3. Ja, `-vsync 0` ist sicher zum Extrahieren von Bildern. Gyan vor 5 Jahren 0