Créer un GIF animé à partir d'un ensemble d'images jpeg

j'ai besoin de quelque chose qui puisse être scripté sur windows 7. Cette image sera utilisée dans les bannières.

21
demandé sur Cbox 2010-09-11 02:37:16

6 réponses

Vous pouvez le faire avec ffmpeg

convertissez D'abord les images en vidéo:

ffmpeg -f image2 -i image%d.jpg video.avi

(cela convertira les images du répertoire courant (nommé image1.jpg, image2.jpg...) vers un fichier vidéo nommé video.avi.)

puis convertissez l'avi en gif:

ffmpeg -i video.avi -pix_fmt rgb24 -loop_output 0 out.gif

Vous pouvez obtenir Windows binaires pour ffmpeg ici.


vous pouvez également faire une chose similaire avec mplayer. Voir l'Encodage à partir de plusieurs fichiers d'images d'entrée.

je pense que la ligne de commande serait quelque chose comme:

mplayer mf://*.jpg -mf w=800:h=600:type=jpg -vf scale=160:120 -vo gif89a:fps=3:output=out.gif

(où 800 & 600 sont la largeur et la hauteur de la source et 160 & 120 sont la largeur et la hauteur de la cible.hors.gif est votre cible de nom de fichier)


je viens de tester ces deux-là et ils fonctionnent très bien. Cependant j'ai obtenu de bien meilleurs résultats de mplayer car j'ai pu spécifier la résolution et framerate. Votre milage peut varier et je suis sûr que vous pourriez trouver plus d'options pour ffmpeg si vous avez cherché.

36
répondu Simon P Stevens 2016-07-30 04:56:50

réponse de Simon P Stevens presque m'a fait il y a:

ffmpeg -f image2 -i image%d.jpg video.avi
ffmpeg -i video.avi -pix_fmt rgb24 -loop_output 0 out.gif

voyons voir si nous pouvons vaincus.

passer par un avi n'est pas nécessaire. -pix_fmtrgb24 est invalide, et le -loop_output option empêche la boucle, ce que je ne veux pas. On obtient:

ffmpeg -f image2 -i image%d.jpg out.gif

mes images d'entrée sont étiquetées avec un nombre à 3 chiffres à zéro rembourré et j'en ai 30 (image_001.jpg, image_002.jpg,...), donc j'ai besoin de fixer le format spécificateur

ffmpeg -f image2 -i image_%003d.jpg out.gif

mes images d'entrée proviennent de mon appareil photo de téléphone, elles sont bien trop grandes! J'ai besoin d'une mise à l'échelle vers le bas.

ffmpeg -f image2 -i image_%003d.jpg -vf scale=531x299 out.gif

j'ai aussi besoin de les faire pivoter de 90 degrés dans le sens des aiguilles d'une montre

ffmpeg -f image2 -i image_%003d.jpg -vf scale=531x299,transpose=1 out.gif

ce gif va jouer avec zéro délai entre les cadres, ce qui n'est probablement pas ce que nous voulons. Spécifiez le framerate des images d'entrée

ffmpeg -f image2 -framerate 9 -i image_%003d.jpg -vf scale=531x299,transpose=1 out.gif

l'image est juste un peu trop grande, donc je vais recadrer 100 pixels de ciel. La transposition rend cela délicat, J'utilise le post-rotation de valeurs x et y:

ffmpeg -f image2 -framerate 9 -i image_%003d.jpg -vf scale=531x299,transpose=1,crop=299,431,0,100 out.gif

Le résultat final, je vais partager mon compagnon est génial l'expression du visage avec le monde:

Example of an animated gif created with ffmpeg

55
répondu dwurf 2017-05-23 12:09:40

Avec ImageMagick:

convert *.png a.gif
28
répondu psycho brm 2013-07-14 09:37:03

ffmpeg.avi et .avi.gif a fonctionné, mais la seule chose à noter est que vos images doivent être nommées en parfait augmentation de l'ordre numérique de travail, sans lacunes. J'ai concocté un script python rapide pour renommer toutes mes images en conséquence, de sorte que ce ffmpeg recette devrait fonctionner:

import os

files = [ f for f in os.listdir('.') if os.path.isfile(os.path.join('.',f)) and f.endswith('.jpg') ]
for i, file in enumerate(sorted(files)):
    os.rename(file, 'image%03d.jpg' % i)

Et puis je suis tombé sur une approche beaucoup plus simple que ffmpeg pour effectuer la conversion, qui utilise simplement L'outil de conversion en ligne de commande D'ImageMagick comme ceci

convert image%03d.jpg[0-198] animated_gif.gif

N'est pas beaucoup plus simple que celle des gens.

Résumé ici: https://gist.github.com/3289840

10
répondu Loisaida Sam 2012-09-27 18:18:37
ffmpeg -f image2 -framerate 1 -i image%d.jpg video.gif

il en résulte un taux de 1 seconde par image. Ajustez le framerate valeur en fonction de vos besoins.

3
répondu luator 2017-11-15 14:57:24

je voudrais juste ajouter dwurf's réponse, que cela va générer un gif avec le standard de 256 couleurs de la palette, ce qui n'est pas très agréable visuellement.

j'ai trouvé deuxblog-posts et adapté à mes besoins, afin d'améliorer la qualité visuelle à l'aide d'une palette personnalisée pour votre animation:

Générer la palette de couleurs:

ffmpeg -f image2 -i image%d.jpg -vf scale=900:-1:sws_dither=ed,palettegen palette.png

Convertissez les images en une vidéo régulière avec la vidéo désirée framerate, parce que la troisième commande n'a fonctionné qu'avec une seule vidéo d'entrée et pas un tas d'images

ffmpeg.exe -f image2 -framerate 1.2 -i image%d.jpg video.flv

maintenant convertissez la vidéo générée avec la palette générée en un gif plus beau:

ffmpeg.exe -i video.flv -i palette.png -filter_complex "fps=1.2,scale=900:-1:flags=lanczos[x];[x][1:v]paletteuse" video.gif
2
répondu Alexander Pacha 2018-05-20 08:43:35