J'ai une série d'images à partir desquelles je veux créer une vidéo. Idéalement, je pourrais spécifier une durée de trame pour chaque trame, mais un taux de trame fixe serait bien aussi. Je fais cela dans wxPython, donc je peux effectuer un rendu sur un wxDC ou je peux enregistrer les images dans des fichiers, comme PNG. Existe-t-il une bibliothèque Python qui me permettra de créer soit une vidéo (AVI, MPG, etc.) ou un GIF animé à partir de ces images?
Edit: j'ai déjà essayé PIL et cela ne semble pas fonctionner. Quelqu'un peut-il me corriger avec cette conclusion ou suggérer une autre boîte à outils? Ce lien semble sauvegarder ma conclusion concernant PIL: http://www.somethinkodd.com/oddthinking/2005/12/06/python-imaging-library-pil-and-animated-gifs/
la source
imageio in anaconda
donneTrue
, yay!Eh bien, maintenant j'utilise ImageMagick. J'enregistre mes images sous forme de fichiers PNG, puis j'appelle convert.exe d'ImageMagick à partir de Python pour créer un GIF animé. La bonne chose à propos de cette approche est que je peux spécifier une durée d'image pour chaque image individuellement. Malheureusement, cela dépend de l'installation d'ImageMagick sur la machine. Ils ont un wrapper Python mais il semble assez merdique et non pris en charge. Toujours ouvert à d'autres suggestions.
la source
convert -delay 20 -loop 0 *jpg animated.gif
convert -delay 20 -resize 300x200 -loop 0 *jpg animated.gif
Depuis juin 2009, l'article de blog cité à l'origine propose une méthode pour créer des GIF animés dans les commentaires . Téléchargez le script images2gif.py (anciennement images2gif.py , mise à jour gracieuseté de @geographika).
Ensuite, pour inverser les frames dans un gif, par exemple:
la source
pip install visvis
, puis dans votre scriptfrom visvis.vvmovie.images2gif import writeGif
.Voici comment vous le faites en utilisant uniquement PIL (installez avec :)
pip install Pillow
:la source
x = [a, b, c]
à ce*x
qui peut être considéré commea, b, c
(sans les crochets enserrant). Dans ces appels de fonction sont synonymes:f(*x) == f(a, b, c)
. Dans le déballage de tuple, il est particulièrement utile dans les cas où vous souhaitez diviser un itérable en une tête (premier élément) et une queue (le reste), ce que je fais dans cet exemple.J'ai utilisé images2gif.py qui était facile à utiliser. Il semble que cela double la taille du fichier.
26 fichiers PNG de 110 Ko, je m'attendais à 26 * 110 Ko = 2860 Ko, mais mon_gif.GIF était de 5,7 Mo
Aussi parce que le GIF était 8 bits, le joli png est devenu un peu flou dans le GIF
Voici le code que j'ai utilisé:
Voici 3 des 26 cadres:
la réduction des images a réduit la taille:
la source
fp.write(globalPalette) TypeError: must be string or buffer, not list
Pour créer une vidéo, vous pouvez utiliser opencv ,
la source
Je suis tombé sur ce post et aucune des solutions n'a fonctionné, alors voici ma solution qui fonctionne
Problèmes avec d'autres solutions jusqu'à présent:
1) Aucune solution explicite quant à la façon dont la durée est modifiée
2) Aucune solution pour l'itération du répertoire en panne, ce qui est essentiel pour les GIF
3) Aucune explication sur la façon d'installer imageio pour python 3
installez imageio comme ceci: python3 -m pip installez imageio
Remarque: vous voudrez vous assurer que vos cadres ont une sorte d'index dans le nom de fichier afin qu'ils puissent être triés, sinon vous n'aurez aucun moyen de savoir où le GIF commence ou se termine
la source
sort
peut donner des résultats inattendus si votre schéma de numérotation n'inclut pas de zéros non significatifs. Aussi pourquoi avez-vous utilisé la carte au lieu d'une simple compréhension de liste?filenames.append(os.path.join(path, filename))
images = [imageio.imread(f) for f in filenames]
est plus propre, plus rapide et plus pythonique.Comme Warren l'a dit l'année dernière , c'est une vieille question. Étant donné que les gens semblent toujours consulter la page, j'aimerais les rediriger vers une solution plus moderne. Comme l'a dit blakev ici , il y a un exemple Pillow sur github .
Remarque: Cet exemple est obsolète (
gifmaker
n'est pas un module importable, seulement un script). Pillow a un GifImagePlugin (dont la source est sur GitHub ), mais le document sur ImageSequence semble indiquer un support limité (lecture uniquement)la source
Ce n'est pas une bibliothèque python, mais mencoder peut le faire: Encodage à partir de plusieurs fichiers d'image d'entrée . Vous pouvez exécuter mencoder à partir de python comme ceci:
la source
Vieille question, beaucoup de bonnes réponses, mais il pourrait encore y avoir un intérêt pour une autre alternative ...
Le
numpngw
module que j'ai récemment installé sur github ( https://github.com/WarrenWeckesser/numpngw ) peut écrire des fichiers PNG animés à partir de tableaux numpy. ( Mise à jour :numpngw
est maintenant sur pypi: https://pypi.python.org/pypi/numpngw .)Par exemple, ce script:
crée:
Vous aurez besoin d'un navigateur qui prend en charge le PNG animé (directement ou avec un plugin) pour voir l'animation.
la source
Comme un membre l'a mentionné ci-dessus, imageio est un excellent moyen de le faire. imageio vous permet également de définir la fréquence d'images, et j'ai en fait écrit une fonction en Python qui vous permet de définir une prise sur l'image finale. J'utilise cette fonction pour des animations scientifiques où le bouclage est utile mais pas un redémarrage immédiat. Voici le lien et la fonction:
Comment créer un GIF en utilisant Python
la source
Avez-vous essayé PyMedia ? Je ne suis pas sûr à 100%, mais il semble que cet exemple de didacticiel cible votre problème.
la source
Avec windows7, python2.7, opencv 3.0, ce qui suit fonctionne pour moi:
la source
La chose la plus simple qui le fait fonctionner pour moi est d'appeler une commande shell en Python.
Si vos images sont stockées telles que dummy_image_1.png, dummy_image_2.png ... dummy_image_N.png, alors vous pouvez utiliser la fonction:
Exécutez simplement:
Cela va construire votre fichier gif my_output.gif.
la source
La tâche peut être terminée en exécutant le script python à deux lignes à partir du même dossier que la séquence de fichiers image. Pour les fichiers au format png, le script est -
la source
Je cherchais un code sur une seule ligne et j'ai trouvé ce qui suit pour mon application. Voici ce que j'ai fait:
Première étape: installez ImageMagick à partir du lien ci-dessous
https://www.imagemagick.org/script/download.php
Deuxième étape: pointez la ligne cmd vers le dossier où les images (dans mon cas, au format .png) sont placées
Troisième étape: tapez la commande suivante
Merci FogleBird pour l'idée!
la source
J'ai juste essayé ce qui suit et j'ai été très utile:
Téléchargez d'abord les bibliothèques
Figtodat
etimages2gif
dans votre répertoire local.Ensuite, collectez les figurines dans un tableau et convertissez-les en un gif animé:
la source
Je suis tombé sur le module ImageSequence de PIL , qui offre une meilleure (et plus standard) aninmation GIF. J'utilise également la méthode after () de Tk cette fois, ce qui est mieux que time.sleep () .
la source
Une fonction simple qui fait des GIF:
la source
Je comprends que vous avez posé des questions sur la conversion d'images en gif; cependant, si le format d'origine est MP4, vous pouvez utiliser FFmpeg :
la source
C'est vraiment incroyable ... Tous proposent un package spécial pour jouer un GIF animé, en ce moment cela peut être fait avec Tkinter et le module PIL classique!
Voici ma propre méthode d'animation GIF (j'ai créé il y a quelque temps). Très simple:
Vous pouvez définir vos propres moyens pour arrêter l'animation. Faites-moi savoir si vous souhaitez obtenir la version complète avec les boutons play / pause / quit.
Remarque: je ne sais pas si les images consécutives sont lues dans la mémoire ou dans le fichier (disque). Dans le second cas, il serait plus efficace s'ils lisent tous en même temps et sont enregistrés dans un tableau (liste). (Je ne suis pas si intéressé de le savoir! :)
la source
sleep
dans le thread principal d'une interface graphique. Vous pouvez utiliser laafter
méthode pour appeler périodiquement une fonction.tk.after()
. Mais ici, je devais rendre le code aussi simple que possible. Celui qui utilise cette méthode d'animation GIF peut appliquer sa propre fonction de retard.