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.
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é.
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_fmt
rgb24
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:
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
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.
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