web-dev-qa-db-fra.com

Création d'une animation GIF à partir de fichiers PNG

Existe-t-il un outil pour créer une animation gif à partir d'un ensemble de fichiers png?

J'ai essayé la commande convert de la suite ImageMagick , mais cela ne réussit pas toujours. De plus, j'ai plusieurs problèmes avec ceci:

  1. Je ne peux pas dire quel est le progrès.
  2. Peu importe ce que j'essaie, le -delay flag ne modifie pas la fréquence d'images de l'animation gif.
  3. convert détermine l'ordre des trames en fonction de l'ordre alphabétique des noms de fichiers. Cela signifie que name500.png sera placé juste après name50.png et non après name450.png Je peux résoudre ce problème en ajoutant des 0, mais c'est ennuyeux.
89
Yotam

Les versions plus récentes de ffmpeg n'ont pas -sameq ( voir FAQ ) mais prennent en charge GIF.

ffmpeg -i %03d.png output.gif

Où% 03d est l'ID de trame à 3 chiffres.

Vous pouvez également essayer d'utiliser ffmpeg pour créer un film à partir d'une séquence d'images, puis convertir le film en une animation GIF (à nouveau en utilisant ffmpeg).

# cf. http://pages.uoregon.edu/noeckel/MakeMovie.html

# first convert an image sequence to a movie
ffmpeg -sameq -i %03d.jpg output.mp4

# ... and then convert the movie to a GIF animation
ffmpeg -i output.mp4 -pix_fmt rgb24 -s qcif -loop_output 0 output.gif
54
nano

convert est un outil de ligne de commande pratique pour ce faire. cd dans le dossier contenant vos png - fichiers et exécutez cette commande:

convert -delay 10 -loop 0 *.png animation.gif

Source: http://ubuntuforums.org/showthread.php?t=1132058

91
RobinJ

L'option --delay De convert ne s'applique qu'à l'image suivante sur la ligne de commande. Ainsi, convert -delay 10 * Ne définira le retard de la première image qu'à 0,1 seconde. L'option doit être répétée:

convert $(for a in *; do printf -- "-delay 10 %s " $a; done; ) result.gif

Pour vos besoins de tri, convert ne trie pas les trames, le globage Shell * Le fait. Si vous savez que vos images sont numérotées de 0 à 700, vous pouvez simplement calculer les nombres vous-même:

convert $(for ((a=0; a<700; a++)); do printf -- "-delay 10 name%s.png " $a; done;) result.gif
20
BatchyX

Mise à jour:

Utilisez convert pour le png-to-gif, puis utilisez gifsicle pour l'animation. Ce n'est pas une solution One App To Do It All, mais bien sûr scriptable.


GIMP peut créer des gifs animés et permet de contrôler le timing/retard et la répétition, etc.

7
gregnotcraig

ffmeg options GIF importantes + données de test

Pour compléter cette réponse :

wget -O opengl-rotating-triangle.Zip https://github.com/cirosantilli/media/blob/master/opengl-rotating-triangle.zip?raw=true
unzip opengl-rotating-triangle.Zip
cd opengl-rotating-triangle
ffmpeg \
  -framerate 60 \
  -pattern_type glob \
  -i 'tmp.*.png' \
  -r 15 \
  -vf scale=512:-1 \
  out.gif \
;

Les données de test ont été générées avec: https://stackoverflow.com/questions/3191978/how-to-use-glut-opengl-to-render-to-a-file/14324292#14324292

Les options ffmpeg importantes que je voulais souligner sont:

  • -patter_type glob: moyen pratique de sélectionner des images
  • -framerate 60 et -r 15: supposez 60 FPS sur les images d'entrée (ffmpeg ne peut pas savoir autrement car aucune donnée FPS dans les images comme dans les formats vidéo), choisissez une image toutes les 4 afin de réduire la taille (4 == 60 / 15)
  • -vf scale=512:-1: définissez la largeur et la hauteur de l'échelle proportionnellement, généralement pour réduire la taille et économiser de l'espace

Voir également:

Testé dans Ubuntu 18.10, ffmpeg 4.0.2.

ImageMagick peut générer une animation gif de bonne qualité. Regardez cette vidéo - http://www.youtube.com/watch?v=OFusYizJ-bA

2
xyz

Concernant le point 2

La version d'ImageMagick "display" que j'ai (ImageMagick 6.7.2-7 2017-01-12) ignore la fréquence d'images définie à l'aide de la commande convert pour produire le gif animé. Essayez un autre programme pour afficher le gif animé comme Firefox.

0
user8388891