Ich habe eine Reihe von Bildern, aus denen ich ein Video erstellen möchte. Idealerweise könnte ich für jedes Bild eine Bilddauer angeben, aber eine feste Bildrate wäre auch in Ordnung. Ich mache das in wxPython, damit ich in ein wxDC rendern oder die Bilder in Dateien wie PNG speichern kann. Gibt es eine Python-Bibliothek, mit der ich entweder ein Video (AVI, MPG usw.) oder ein animiertes GIF aus diesen Frames erstellen kann?
Edit: Ich habe PIL bereits ausprobiert und es scheint nicht zu funktionieren. Kann mich jemand mit dieser Schlussfolgerung korrigieren oder ein anderes Toolkit vorschlagen? Dieser Link scheint meine Schlussfolgerung in Bezug auf PIL zu stützen: http://www.somethinkodd.com/oddthinking/2005/12/06/python-imaging-library-pil-and-animated-gifs/
quelle
imageio in anaconda
ergibtTrue
, yay!Nun benutze ich ImageMagick. Ich speichere meine Frames als PNG-Dateien und rufe dann die konvert.exe von ImageMagick aus Python auf, um ein animiertes GIF zu erstellen. Das Schöne an diesem Ansatz ist, dass ich für jeden Frame einzeln eine Frame-Dauer festlegen kann. Leider hängt dies davon ab, ob ImageMagick auf dem Computer installiert ist. Sie haben einen Python-Wrapper, aber er sieht ziemlich beschissen aus und wird nicht unterstützt. Noch offen für andere Vorschläge.
quelle
convert -delay 20 -loop 0 *jpg animated.gif
convert -delay 20 -resize 300x200 -loop 0 *jpg animated.gif
Ab Juni 2009 verfügt der ursprünglich zitierte Blog-Beitrag über eine Methode zum Erstellen animierter GIFs in den Kommentaren . Laden Sie das Skript images2gif.py herunter (früher images2gif.py , Update mit freundlicher Genehmigung von @geographika).
Um dann die Frames in einem GIF umzukehren, zum Beispiel:
quelle
pip install visvis
in Ihrem Skriptfrom visvis.vvmovie.images2gif import writeGif
.So geht's nur mit PIL (Installation mit :)
pip install Pillow
:quelle
x = [a, b, c]
an*x
das man denken kanna, b, c
(ohne die beiliegenden Klammern). Bei Funktionsaufrufen sind dies auch :f(*x) == f(a, b, c)
. Beim Auspacken von Tupeln ist es besonders nützlich, wenn Sie eine Iterable in einen Kopf (erstes Element) und einen Schwanz (den Rest) aufteilen möchten, was ich in diesem Beispiel mache.Ich habe images2gif.py verwendet, was einfach zu bedienen war. Es schien jedoch die Dateigröße zu verdoppeln.
26 110kb PNG-Dateien, ich erwartete 26 * 110kb = 2860kb, aber my_gif.GIF war 5.7mb
Auch weil das GIF 8 Bit war, wurden die netten PNGs im GIF etwas unscharf
Hier ist der Code, den ich verwendet habe:
Hier sind 3 der 26 Frames:
Durch Verkleinern der Bilder wurde die Größe verringert:
quelle
fp.write(globalPalette) TypeError: must be string or buffer, not list
Um ein Video zu erstellen, können Sie opencv verwenden .
quelle
Ich bin auf diesen Beitrag gestoßen und keine der Lösungen hat funktioniert. Hier ist meine Lösung, die funktioniert
Bisherige Probleme mit anderen Lösungen:
1) Keine explizite Lösung für die Änderung der Dauer
2) Keine Lösung für die für GIFs erforderliche Iteration des Verzeichnisses außerhalb der Reihenfolge,
3) Keine Erklärung für die Installation von imageio für Python 3
installiere imageio wie folgt: python3 -m pip installiere imageio
Hinweis: Sie sollten sicherstellen, dass Ihre Frames einen Index im Dateinamen haben, damit sie sortiert werden können. Andernfalls können Sie nicht wissen, wo das GIF beginnt oder endet
quelle
sort
kann zu unerwarteten Ergebnissen führen, wenn Ihr Nummerierungsschema keine führenden Nullen enthält. Auch warum haben Sie Karte anstelle eines einfachen Listenverständnisses verwendet?filenames.append(os.path.join(path, filename))
images = [imageio.imread(f) for f in filenames]
ist sauberer, schneller und pythonischer.Wie Warren letztes Jahr sagte , ist dies eine alte Frage. Da die Leute die Seite immer noch zu sehen scheinen, möchte ich sie auf eine modernere Lösung umleiten. Wie Blakev hier sagte , gibt es ein Kissenbeispiel auf Github .
Hinweis: Dieses Beispiel ist veraltet (
gifmaker
kein importierbares Modul, nur ein Skript). Pillow hat ein GifImagePlugin (dessen Quelle sich auf GitHub befindet ), aber das Dokument auf ImageSequence scheint auf eingeschränkte Unterstützung hinzuweisen ( schreibgeschützt ).quelle
Es ist keine Python-Bibliothek, aber Mencoder kann das: Codierung aus mehreren Eingabebilddateien . Sie können Mencoder wie folgt aus Python ausführen:
quelle
Alte Frage, viele gute Antworten, aber es könnte immer noch Interesse an einer anderen Alternative geben ...
Das
numpngw
Modul, das ich kürzlich auf github eingerichtet habe ( https://github.com/WarrenWeckesser/numpngw ), kann animierte PNG-Dateien aus numpy Arrays schreiben. ( Update :numpngw
ist jetzt auf pypi: https://pypi.python.org/pypi/numpngw .)Zum Beispiel dieses Skript:
erstellt:
Sie benötigen einen Browser, der animiertes PNG unterstützt (entweder direkt oder mit einem Plugin), um die Animation anzuzeigen.
quelle
Wie ein Mitglied oben erwähnt hat, ist imageio eine großartige Möglichkeit, dies zu tun. Mit imageio können Sie auch die Bildrate einstellen, und ich habe tatsächlich eine Funktion in Python geschrieben, mit der Sie das endgültige Bild festhalten können. Ich benutze diese Funktion für wissenschaftliche Animationen, bei denen Schleifen nützlich sind, ein sofortiger Neustart jedoch nicht. Hier ist der Link und die Funktion:
So erstellen Sie ein GIF mit Python
quelle
Haben Sie PyMedia ausprobiert ? Ich bin nicht 100% sicher, aber es sieht so aus, als ob dieses Tutorial-Beispiel auf Ihr Problem abzielt.
quelle
Unter Windows 7, Python 2.7 und OpenCV 3.0 funktioniert Folgendes für mich:
quelle
Das Einfachste, was es für mich funktioniert, ist das Aufrufen eines Shell-Befehls in Python.
Wenn Ihre Bilder wie dummy_image_1.png, dummy_image_2.png ... dummy_image_N.png gespeichert sind, können Sie die folgende Funktion verwenden:
Einfach ausführen:
Dadurch wird Ihre GIF-Datei my_output.gif erstellt.
quelle
Die Aufgabe kann abgeschlossen werden, indem das zweizeilige Python-Skript aus demselben Ordner wie die Sequenz der Bilddateien ausgeführt wird. Für PNG-formatierte Dateien lautet das Skript -
quelle
Ich suchte nach einem einzeiligen Code und fand Folgendes für meine Anwendung. Folgendes habe ich getan:
Erster Schritt: Installieren Sie ImageMagick über den folgenden Link
https://www.imagemagick.org/script/download.php
Zweiter Schritt: Zeigen Sie mit der cmd-Zeile auf den Ordner, in dem sich die Bilder (in meinem Fall im PNG-Format) befinden
Dritter Schritt: Geben Sie den folgenden Befehl ein
Danke FogleBird für die Idee!
quelle
Ich habe gerade Folgendes versucht und war sehr nützlich:
Laden Sie zuerst die Bibliotheken
Figtodat
undimages2gif
in Ihr lokales Verzeichnis herunter .Zweitens Sammeln Sie die Figuren in einem Array und konvertieren Sie sie in ein animiertes GIF:
quelle
Ich bin auf das ImageSequence- Modul von PIL gestoßen , das eine bessere (und standardisiertere) GIF-Aktivierung bietet. Diesmal verwende ich auch die after () -Methode von Tk , die besser ist als time.sleep () .
quelle
Eine einfache Funktion, die GIFs erstellt:
quelle
Ich verstehe, Sie haben gefragt, ob Sie Bilder in ein GIF konvertieren möchten. Wenn das Originalformat jedoch MP4 ist, können Sie FFmpeg verwenden :
quelle
Es ist wirklich unglaublich ... Alle schlagen ein spezielles Paket zum Abspielen eines animierten GIF vor, das derzeit mit Tkinter und dem klassischen PIL-Modul möglich ist!
Hier ist meine eigene GIF-Animationsmethode (die ich vor einiger Zeit erstellt habe). Sehr einfach:
Sie können Ihre eigenen Mittel festlegen, um die Animation zu stoppen. Lassen Sie mich wissen, ob Sie die Vollversion mit den Schaltflächen Wiedergabe / Pause / Beenden erhalten möchten.
Hinweis: Ich bin nicht sicher, ob die aufeinander folgenden Frames aus dem Speicher oder von der Datei (Festplatte) gelesen werden. Im zweiten Fall wäre es effizienter, wenn alle gleichzeitig lesen und in einem Array (Liste) speichern würden. (Ich bin nicht so interessiert, es herauszufinden! :)
quelle
sleep
den Hauptthread einer GUI aufzurufen . Mit dieserafter
Methode können Sie eine Funktion regelmäßig aufrufen.tk.after()
ich mich normalerweise . Aber hier musste ich den Code so einfach wie möglich machen. Wer diese GIF-Animationsmethode verwendet, kann seine eigene Verzögerungsfunktion anwenden.