Générer par programmation vidéo ou GIF animé en Python?
J'ai une série d'images que je veux créer une vidéo à partir d'. Idéalement je pourrais spécifier l'image de la durée de chaque image, mais un cadre fixe taux serait bien aussi. Je fais cela en wxPython, afin que je puisse rendre à un wxDC ou je peux enregistrer les images dans les fichiers, comme le PNG. Est-il une bibliothèque Python qui va me permettre de créer une vidéo (AVI, MPG, etc) ou d'un GIF animé à partir de ces images?
Edit: j'ai déjà essayé de PIL et il ne semble pas fonctionner. Quelqu'un peut-il me corriger avec cette conclusion ou suggérer une autre boîte à outils? Ce lien semble sauvegarde ma conclusion concernant PIL: http://www.somethinkodd.com/oddthinking/2005/12/06/python-imaging-library-pil-and-animated-gifs/
Vous devez vous connecter pour publier un commentaire.
J'avais recommandé de ne pas utiliser images2gif de visvis parce qu'il a des problèmes avec PIL/Oreiller et n'est pas activement maintenu (je devrais le savoir, parce que je suis l'auteur).
Au lieu de cela, veuillez utiliser imageio, qui a été développé pour résoudre ce problème et de plus en plus, et est destiné à rester.
Rapide et sale solution:
Pour les films plus longs, l'utilisation de la diffusion de l'approche:
images
plein de PIL images d'un gif à l'aide de imageio:saveGifPIL = lambda filename, images, **mimsaveParams: imageio.mimsave(filename, [[(img.save(buf,format='png'), buf.seek(0), imageio.imread(buf))[2] for buf in [BytesIO()]][0] for img in images], **mimsaveParams)
, alors vous pouvez simplement fairesaveGifPIL("blah.gif", images)
et vous pouvez également ajouter des arguments commesaveGifPIL("blah.gif", images, fps=20)
imageio in anaconda
rendementsTrue
, yay!duration
peut être passé comme mot-clé arg à la foismimsave
etget_writer
. 2. Bibliothèque de Nice, c'est dommage que ça ne fait pas de APNG. 3. Attention,imageio
RVB tableaux et OpenCV, par défaut, la GBR.Bien, maintenant, je suis en utilisant ImageMagick. - Je enregistrer mes images en tant que fichiers PNG et ensuite invoquer ImageMagick convert.exe à partir de Python pour créer un GIF animé. La bonne chose à propos de cette approche est que je peux spécifier l'image de la durée de chaque image individuellement. Malheureusement, cela dépend de ImageMagick est installé sur la machine. Ils ont un wrapper Python, mais il semble assez merdique et non pris en charge. Toujours ouvert à d'autres suggestions.
convert -delay 20 -loop 0 *jpg animated.gif
convert -delay 20 -resize 300x200 -loop 0 *jpg animated.gif
En juin 2009, à l'origine de la cité blog a une méthode pour créer des Gif animés dans les commentaires. Télécharger le script images2gif.py (anciennement images2gif.py, de courtoisie mise à jour de @geographika).
Alors, pour inverser les images en gif, par exemple:
pip install visvis
, puis dans votre scriptfrom visvis.vvmovie.images2gif import writeGif
.J'ai utilisé images2gif.py qui était facile à utiliser. Il semble en fait le double de la taille du fichier mais..
26 110kb fichiers PNG, je m'attendais à 26*110kb = 2860kb, mais my_gif.GIF a été de 5,7 mo
Aussi parce que le GIF a été 8bit, la belle de la png est devenue un peu floue dans le GIF
Voici le code que j'ai utilisé:
Voici 3 des 26 images:
le rétrécissement des images réduit la taille:
fp.write(globalPalette) TypeError: must be string or buffer, not list
fp.write(palette)
): TypeError: argument 1 doit être de chaîne ou de tampon, pas Aucun. C'est parce que la palette est définie à partir degetheader(im)[1]
, qui est nulle (Aucun). Votre code est OK?Pour créer une vidéo, vous pouvez utiliser opencv,
Voici comment vous le faites à l'aide de seulement PIL (installer avec:
pip install Pillow
):Je suis tombé sur ce post et aucune des solutions n'a fonctionné, donc voici mon solution qui ne fonctionne
Des problèmes avec d'autres solutions à ce jour:
1) Pas de solution explicite quant à la façon dont la durée est modifiée
2) Pas de solution pour les sortir de l'ordre répertoire itération, ce qui est essentiel pour GIFs
3) Aucune explication de comment installer imageio pour python 3
installer imageio comme ceci: python3 -m pip install imageio
Remarque: vous voulez vous assurer que vos images ont une sorte d'indice dans le nom de fichier de sorte qu'ils peuvent être triés, sinon vous n'aurez aucun moyen de savoir où l'GIF commence ou se termine
sort
peut provoquer des résultats inattendus si votre schéma de numérotation ne pas inclure les zéros non significatifs. Pourquoi avez-vous l'utilisation de la carte au lieu d'une simple liste de compréhension?filenames.append(os.path.join(path, filename))
images = [imageio.imread(f) for f in filenames]
est plus propre, plus rapide, et plus pythonic.Je vous poste une réponse de plus comme il est plus simple que tout le posté jusqu'à présent:
à l'aide des images existantes:
Et, comme trop faible versions d'oreiller sont silencieusement défaut est ici en tant que bonus de la version de la bibliothèque de vérification de version:
Comme Warren dit l'année dernière, c'est une vieille question. Puisque les gens semblent toujours l'affichage de la page, je voudrais rediriger vers une solution plus moderne. Comme blakev dit ici, il y a un Oreiller exemple sur github.
Remarque: Cet exemple est obsolète (
gifmaker
n'est pas importable module, seulement un script). Oreiller a un GifImagePlugin (dont la source est sur GitHub), mais la doc sur ImageSequence semble indiquer un soutien limité (lecture uniquement)Ce n'est pas une bibliothèque python, mais mencoder peut le faire: L'encodage à partir de plusieurs fichiers d'images d'entrée. Vous pouvez exécuter la commande mencoder de python comme ceci:
Vieille question, beaucoup de bonnes réponses, mais il y a encore de s'intéresser à une autre alternative...
La
numpngw
module que j'ai récemment mis en place sur github (https://github.com/WarrenWeckesser/numpngw) peut écrire animé fichiers PNG à partir des 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 animé PNG (directement ou avec un plugin) pour voir l'animation.
Que l'un des membres mentionnés ci-dessus, imageio est un excellent moyen pour ce faire. imageio vous permet également de définir la cadence, et j'ai effectivement écrit une fonction en Python qui permet de définir une emprise sur l'image finale. J'utilise cette fonction pour des animations scientifiques où la boucle est utile mais le redémarrage immédiat n'est pas. Voici le lien et la fonction:
Comment faire un GIF à l'aide de Python
Avez-vous essayé PyMedia? Je ne suis pas sûr à 100% mais il semble que cet exemple de tutoriel objectifs de votre problème.
Avec windows7, python2.7, opencv 3.0, les ouvrages suivants, pour moi:
La chose la plus facile qui fait que cela fonctionne pour moi, c'est l'appel d'une commande shell Python.
Si vos images sont stockées comme dummy_image_1.png, dummy_image_2.png, ... dummy_image_N.png, vous pouvez utiliser la fonction:
Exécutez simplement:
Cela permettra de construire votre fichier gif my_output.gif.
La tâche peut être complété par l'exécution de la deux ligne de script python dans le même dossier que la séquence de fichiers d'image. Pour des fichiers au format png, le script est -
Je cherchais un seule ligne de code et constaté ce qui suit à travailler pour mon application. Voici ce que j'ai fait:
Première Étape: Installer ImageMagick à partir du lien ci-dessous
https://www.imagemagick.org/script/download.php
Deuxième Étape: Point de la ligne de cmd dans le dossier où les images (dans mon cas .format png) sont placés
Troisième Étape: Tapez la commande suivante
Grâce FogleBird pour l'idée!
J'ai juste essayé la suite et a été très utile:
D'abord Télécharger les bibliothèques
Figtodat
etimages2gif
dans votre répertoire local.Ensuite Recueillir les chiffres dans un tableau et de les convertir en gif animé:
Je suis tombé sur PIL est ImageSequence module, qui offre une meilleure (et la plus standard) GIF aninmation. J'ai aussi utiliser les Savoirs traditionnels de la après() méthode cette fois, ce qui est mieux que temps.sleep().
Une fonction simple qui permet GIFs:
Je comprends que vous avez demandé à propos de la conversion d'images en gif; cependant, si le format d'origine est MP4, vous pouvez utiliser FFmpeg:
C'est vraiment incroyable ... sont Tous en proposant des forfaits spéciaux pour jouer un GIF animé, à l'instant qu'il peut être fait avec Tkinter et le classique PIL module!
Voici mon propre animation GIF méthode (que j'ai créé il y a un moment). Très simple:
Vous pouvez définir vos propres moyens pour arrêter l'animation. Laissez-moi savoir si vous désirez obtenir la version complète avec play/pause/arrêter de boutons.
Note: je ne suis pas sûr si les images consécutives sont lues depuis la mémoire ou à partir du fichier (disque). Dans le second cas, il serait plus efficace si tous se lire à la fois et enregistré dans un tableau (liste). (Je ne suis pas tellement intéressé à trouver! 🙂
sleep
dans le thread principal d'une interface graphique. Vous pouvez utiliser leafter
méthode pour appeler une fonction périodique.tk.after()
moi-même. Mais ici, j'avais besoin de faire le code le plus simple possible. Celui qui utilise cette animation GIF méthode peut s'appliquer à sa propre fonction de délai.