Gifs animés Tile

10

Existe-t-il un moyen d'utiliser imagemagic / montage pour paver des gifs animés en boucle (mélangés avec des gifs non animés)?

Autrement dit, je veux concaténer les animations dans l'espace, pas dans le temps. Je me rends compte que le nombre d'images et leur durée dans l'animation peuvent rendre impossible la combinaison nette de deux animations. Mais je suis d'accord avec le programme faisant des approximations et des suppositions, et étendant / répétant les images, tant que toutes les images sont là d'une manière ou d'une autre.

J'ai essayé

convert *.gif -append output.gif

et

montage *.gif -mode concatenate -tile x1 output.gif

mais ceux-ci traitent tous les deux les gifs animés comme plusieurs gifs individuels non animés.

Je suppose que je pourrais probablement écrire un script pour séparer les images animées par des images, répéter / étendre des boucles plus courtes si nécessaire pour correspondre à la boucle la plus longue, répéter les gifs non animés car autant d'images sont dans la plus longue animée, assembler les images correspondantes dans de grands cadres simples avec -append, puis combinez ces grands cadres dans un grand gif. Mais je ne veux pas réinventer la roue si cela est déjà possible par une simple commande.

Je suis bien sûr ouvert à d'autres options gratuites que imagemagick.

tsbertalan
la source
how-to.ytmnd.com
Ƭᴇcʜιᴇ007
2
Je vais prendre cela car il n'était probablement pas prévu; comme un commentaire sérieux. Oui, je veux mettre en mosaïque des GIF. Mais en permanence, pas en HTML. Merci pour le lien. Je vais enregistrer ce GIF particulier pour une utilisation ultérieure.
tsbertalan
1
@tsbertalan Avez-vous fini par comprendre cela?
Seb Barre

Réponses:

1

Il semble que vous souhaitiez faire correspondre plusieurs animations dans le temps, mais cela va prendre un programme pour lire chaque image et son retard, puis émettre cette image à une fréquence périodique jusqu'à ce que le retard soit atteint. par exemple: 1 trame, un retard de 1 seconde et votre «fréquence» est de 100 ms, donc vous voudriez que 10 trames soient écrites à 100 ms? Et puis converti en un montage linéaire?

Cela nécessiterait un programme ou un script lourd pour effectuer ce type de traitement, et vous devriez définir votre «fréquence» (100 ms ici).

Mais cela fonctionne bien: (gifsicle est un package, le montage fait partie du package imagemagick)

gifsicle --unoptimize cool_animation.gif | \
  montage -tile x1 - linear_frames.png

(ligne interrompue pour plus de lisibilité)

La première ligne sépare le gif entrant en images individuelles (à stdout), mais avec les calques remplis. au départ, sans l'option --unoptimize, cela donnerait la première image, mais les images suivantes ne contenaient que ce qui changeait à chaque fois. Conçu pour des montages étranges!

La deuxième ligne crée la sortie linéaire, en prenant chaque image de trame (à partir de stdin) et en les disposant dans l'ordre que vous spécifiez. 'x1' pour les disposer le long d'une ligne horizontale.

Vous pouvez remplacer le nom de fichier unique (cool_animation.gif) par plusieurs, ou même un caractère générique * .gif.

Je ne suis pas sûr que ce soit ce que vous recherchez.

lornix
la source
Lorsqu'il est modifié gifsicle --colors=255 DATA.gif | gifsicle --unoptimize | montage -tile x1 - linear_frames.pngpour l'image de test de Ƭᴇcʜιᴇ007, cela me donne imgur.com/a/Likr9 ; pas exactement ce que je recherche. Je ne me souviens pas du but initial; Je suppose que j'ai probablement juste écrit un script pour tout expliquer explicitement.
tsbertalan