J'utilise ImageMagick pour transformer une collection de pngs en un seul gif. Je veux que cette image soit bouclée le plus rapidement possible.
Ceci correspond approximativement au résultat attendu (avec la permission de Wikipedia ):
Voici le résultat obtenu:
Sur mon navigateur (Firefox 17), le gif attendu est deux fois plus rapide que le gif réel. Cela me surprend, car j’ai précisé que chaque image devrait avoir 0 délai.
J'ai d'abord créé 36 pngs en faisant exploser le gif emprunté à Wikipedia:
--caution: command generates 36 pngs
convert.exe newton.gif newton_%d.png
Ensuite, j'ai utilisé coalesce
pour recombiner les pngs en un gif.
convert.exe -dispose none -delay 0 newton_%d.png[0-35] -coalesce output.gif
identify
confirme que chaque image n'a pas de retard:
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,
C’est en fait moins de retard que l’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,
Le gif réel a moins de retard que le gif attendu. Alors pourquoi le gif attendu est-il deux fois plus rapide que le gif réel?
J'ai expérimenté et créé la version 10ms (delay = 1).
Il semble que les programmes qui rendent les gifs ont tendance à ne pas respecter les taux de retard de 0 centième de seconde. Au lieu de cela, ils utilisent une valeur beaucoup plus grande que la petite valeur que vous avez choisie.
Je ne peux pas vraiment commenter les raisons pour lesquelles ils font cela. J'ai rencontré plus d'une raison, et il est possible que ce soit une pure spéculation.
En général, je vous recommanderais d’utiliser un délai d’au moins deux centièmes de seconde dans tous les cas.
Sources (qui démontrent qu'il semble y avoir plusieurs raisons à cela. Certaines sont relativement anciennes):
On dirait que @ DavidMah a raison. Sur mon système Linux, le délai minimum est de 0.5:
convert -dispose none -delay 0.4 newton_%d.png[0-35] -coalesce output0.4.gif
convert -dispose none -delay 0.5 newton_%d.png[0-35] -coalesce output0.5.gif
convert -dispose none -delay 1 newton_%d.png[0-35] -coalesce output1.gif
Pour une raison quelconque, les images ne semblent pas être affichées correctement dans mon navigateur. Avec une visionneuse d'images locale (eom
), la première image est aussi lente que celle de la question d'origine et les deux autres sont plus rapides que celles de wikipedia. Je poste quand même au cas où il s'agirait d'un problème spécifique à mon navigateur. Dans tous les cas, vous devriez obtenir de meilleures vitesses si vous essayez les commandes ci-dessus.
MISE À JOUR: Il semble y avoir 2 problèmes. Les navigateurs (au moins y firefox et chrome exécutant Linux) ne peuvent pas afficher les gifs créés avec un délai <1,5. 1,5 fonctionne bien, 1,4 est lent. Ma visionneuse d'images peut gérer des délais de 0,5 et plus. Essayez de télécharger l'une des images ci-dessus et de l'ouvrir dans votre lecteur d'images préféré. Aussi, regardez ces:
convert -dispose none -delay 1.4 newton_%d.png[0-35] -coalesce output1.4.gif
convert -dispose none -delay 1.5 newton_%d.png[0-35] -coalesce output1.5.gif
UPDATE2: @DavidMah indique dans les commentaires ci-dessous que les valeurs décimales sont arrondies à l'entier le plus proche. Ainsi, 1,4 est arrondi à 1, ce qui est trop lent, tandis que 1,5 est arrondi à 2, ce qui est OK.
J'ai eu plus de succès en utilisant la notation XxY
delay. Essentiellement, la x
ressemble à un /
; si vous spécifiez -delay 1x20
, le cadre est affiché pendant 1/20ème de seconde.