Ich verwende ImageMagick, um eine Sammlung von PNGs in ein einziges GIF zu verwandeln. Ich möchte, dass dieses GIF so schnell wie möglich in einer Schleife angezeigt wird.
Dies ist ungefähr die Ausgabe, die ich erwarte (mit freundlicher Genehmigung von Wikipedia ):
Dies ist die Ausgabe, die ich tatsächlich bekomme:
In meinem Browser (Firefox 17) läuft das erwartete GIF mehr als doppelt so schnell wie das tatsächliche GIF. Das überrascht mich, denn ich habe festgelegt, dass jeder Frame 0 Delay haben soll.
Zuerst habe ich 36 PNGs erstellt, indem ich das von Wikipedia geliehene GIF explodiert habe:
--caution: command generates 36 pngs
convert.exe newton.gif newton_%d.png
Dann habe ich coalesce
die PNGs zu einem GIF zusammengefasst.
convert.exe -dispose none -delay 0 newton_%d.png[0-35] -coalesce output.gif
identify
bestätigt, dass jeder Frame keine Verzögerung hat:
identify.exe -format "%T, " output.gif
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
Dies ist in der Tat weniger Verzögerung als das Original:
identify.exe -format "%T, " newton.gif
5, 2, 2, 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 2, 5, 2, 2, 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 2,
Das tatsächliche GIF hat eine geringere Verzögerung als das erwartete GIF. Warum ist das erwartete GIF also doppelt so schnell wie das tatsächliche GIF?
quelle
-delay 2
.Antworten:
Ich habe experimentiert und die 10ms (delay = 1) Version erstellt.
Es scheint, dass Programme, die Gifs rendern, dazu neigen, die 0-Hundertstelsekunden-Verzögerungsrate nicht zu berücksichtigen. Stattdessen verwenden sie einen Wert, der viel größer ist als der von Ihnen gewählte kleine Wert.
Ich kann die Gründe, warum sie dies tun, nicht wirklich kommentieren. Ich bin auf mehr als einen Grund gestoßen, und es ist möglich, dass alles Spekulationen sind.
Im Allgemeinen würde ich empfehlen, dass Sie in allen Fällen eine Verzögerung von mindestens zwei Hundertstel Sekunden verwenden.
Quellen (die belegen, dass es mehrere Gründe dafür zu geben scheint. Einige sind relativ alt):
quelle
Es sieht so aus, als ob @DavidMah richtig ist. Auf meinem Linux-System beträgt die minimale Verzögerung 0,5:
Aus irgendeinem Grund werden die Bilder in meinem Browser nicht richtig angezeigt. Wenn Sie einen lokalen Bildbetrachter (
eom
) verwenden, ist das erste Bild so langsam wie das in der ursprünglichen Frage und beide anderen sind schneller als die von Wikipedia. Ich poste trotzdem, falls es sich um ein spezifisches Problem meines Browsers handelt. In jedem Fall sollten Sie bessere Geschwindigkeiten erzielen, wenn Sie die oben angegebenen Befehle ausführen.UPDATE: Es scheint 2 Probleme zu geben. Browser (mindestens Firefox und Chromium, die unter Linux ausgeführt werden) können keine GIFs anzeigen, die mit einer Verzögerung von <1,5 erstellt wurden. 1.5 funktioniert gut, 1.4 ist langsam. Mein Bildbetrachter kann Verzögerungen von 0,5 und mehr verarbeiten. Laden Sie eines der oben genannten Bilder herunter und öffnen Sie es in Ihrem bevorzugten Bildbetrachter. Schauen Sie sich auch diese an:
UPDATE2: @DavidMah weist in den Kommentaren unten darauf hin, dass Dezimalwerte auf die nächste Ganzzahl gerundet werden. Also wird 1.4 auf 1 gerundet, was zu langsam ist, während 1.5 auf 2 gerundet wird, was in Ordnung ist.
quelle
Ich hatte mehr Erfolg mit der
XxY
Verzögerungsnotation, im Wesentlichenx
ist das wie ein/
, wenn Sie also angeben-delay 1x20
, wird der Frame für 1/20 Sekunde angezeigt.quelle