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:
-delay
flag ne modifie pas la fréquence d'images de l'animation gif.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.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
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
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
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.
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'espaceVoir é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
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.