Créer et éditer des GIF animés avec Imagemagick

Le GIF est à internet ce que les Rayban Wayfarer sont à la mode : à la fois désuets et modernes. Si vous voulez être au top du webdesign, soit une sorte de Cristina Cordula du HTML, voici un récapitulatif de que qu’on peut faire en matière de lolcats avec Imagemagick.

Convertir un ensemble de fichiers image en GIF animé

convert -delay 20 -loop 0 image*.png Animation.gif

Le delay donne le temps entre chaque frame. Par défaut, l’unité est le centième de seconde (dans l’exemple précédent je demande donc 0,2 s entre chaque frame). Vous pouvez utiliser une autre fraction de la seconde en séparant le temps et la fraction d’un x. Ainsi, si vous voulez 24 images par secondes, vous devrez utiliser -delay 1x24.

Changer le framerate d’un fichier GIF

Identifiez le framerate actuel :

identify -verbose Old.gif | grep Delay

Définissez le nouveau framerate :

convert -delay 1x30 Old.gif New.gif

Inverser l’ordre des frames

convert -reverse Old.gif New.gif

Extraire chaque frame d’un fichier GIF

Si vous avez besoin d’extraire les frames dans des fichiers distincts, pour inclure une animation sous $latex \LaTeX$ par exemple :

convert GIFanimé.gif Image_%d.png

Faire une « patrouille »


Une patrouille (cycle patrol) consiste à inverser l’animation à la fin de celle-ci, ce qui peut être utile pour faire une boucle infinie :

convert -duplicate 1,-2-1 Old.gif New.gif

L’option duplicate permet de rajouter des copies des frames spécifiées. Elle prend deux arguments : le nombre de répétitions et les indices des frames à recopier, les arguments étant séparés d’une virgule. Les indices négatifs signifient que l’indexation se fait depuis la dernière frame. Dans mon cas, je demande donc de rajouter une copie de chaque frame, depuis l’avant-dernière (-2) jusqu’à la première (1).

Convertir une vidéo en GIF

Pour cela, il vous faudra utiliser l’inénarrable ffmpeg, et commencer par convertir les frames en clichés individuels :

ffmpeg -t <durée> -ss <date du début> -i <fichier video> out%04d.gif

La durée est donnée en secondes et la date de début au format hh :mm :ss. Reste à fusionner les images dans un même GIF, comme décrit au début de cet article.