Ich möchte ein .gif
animiertes Bild aus einem bestimmten Satz von .jpg
Bildern erstellen.
Ich würde es vorziehen, es von der Kommandozeile aus zu tun, daher wären Kommandozeilen-Tools sehr willkommen.
command-line
image-processing
gif
Maythux
quelle
quelle
Antworten:
Sie können das ImageMagick- Paket verwenden. Installieren Sie es mit dem Befehl:
Jetzt können Sie
gif
aus der Anzahl der Bilder (jpg
) eine erstellen, indem Sie Folgendes verwenden:quelle
-resize 50%
.-deconstruct
. Ich habe auch festgestellt, dass ImageMagick sehr speicherhungrig ist, siehe Benchmarks: askubuntu.com/a/1102183/52975convert -delay 0 -loop 0 *.tif myanimated.gif
schön gearbeitet, auf 720 tif - DateienSo vervollständigen Sie die @ Maythux-Antwort:
Um zu vermeiden, dass eine sehr große Datei generiert wird, können Sie die folgende
-resize
Option verwenden:In meinem Fall habe ich 4608 x 3456 Bilder und das generierte GIF war mehr als 300 MB für 32 Bilder
oder
Pass auf * .jpg auf
*.jpg
Wenn Sie mit numerischen Werten arbeiten, kann es sein, dass Sie ein GIF mit unsortierten Bildern erstellen.Da die Aufnahmen sehr schnell gemacht wurden (10 / s), haben sie alle die gleiche Änderungszeit und Sie können
ls -t
zum Beispiel nicht mit Tricks umgehen . Auf Ubuntu können Siels -v
stattdessen Folgendes verwenden :Das numerische Sortieren ist unter Mac OS X jedoch recht schwierig. Ich denke, Sie müssen ein benutzerdefiniertes Skript erstellen.
quelle
find
,sort
Klammererweiterung und so weiter. Dasls
Tool ist für diese Art von Dingen bekanntermaßen ungeeignet. Verwenden Siefind
. Es gibt eine gewisse Lernkurve, aber es lohnt sich.Ich habe nicht genug Reputation, um zu kommentieren, aber anstatt Dateinamen zu ändern, können Sie Globbing verwenden, um Ihre Shell zu veranlassen, Dateinamen zu erweitern
quelle
GIMP
Mit GIMP ist dies problemlos möglich. Installieren Sie es zuerst, wenn es noch nicht mit installiert wurde
Erstellen Sie das GIF
Von GIMP aus gehen Sie zu Datei -> Als Ebenen öffnen, um alle PNGs auf ihrer eigenen Ebene zu öffnen.
Von hier aus können Sie Änderungen an den Ebenen vornehmen und anschließend zu Datei -> Exportieren als wechseln . Stellen Sie im Dialogfeld sicher, dass der Dateityp auf GIF eingestellt ist.
Von dort aus gelangen Sie zu den GIF-Exportoptionen. Aktivieren Sie die Option " Als Animation " und stellen Sie die Parameter nach Bedarf ein.
quelle
ffmeg Lösung + Testdaten
Ab Ubuntu 18.10, ffpmeg 4.0.2-2, ImageMagick 6.9.10-8 habe ich festgestellt, dass ffmpeg viel schneller ist und viel weniger Speicher benötigt .
Der einfachste Konvertierungsbefehl lautet:
Sie können meine Testdaten erhalten mit:
Die Testdaten wurden generiert mit: https://stackoverflow.com/questions/3191978/how-to-use-glut-opengl-to-render-to-a-file/14324292#14324292 und enthalten 256 PNG-Bilder im Format 1024x1024.
Und hier sind noch weitere Testdaten, die Sie jetzt direkt in Ihrem Browser generieren können! https://stackoverflow.com/questions/19235286/convert-html5-canvas-sequence-to-a-video-file/57153718#57153718
Die wichtigen
ffmpeg
Optionen, die ich hervorheben möchte, sind:-pattern_type glob
: Bequeme Methode zum Auswählen von Bildern-framerate 60
: Nehmen Sie 60 FPS für Eingangsbilder an und geben Sie die gleichen FPS aus.ffmpeg
kann nicht anders wissen, da es keine FPS-Daten in Bildern gibt, wie es in Videoformaten ist.Es dauert ungefähr 4 Sekunden, bis die 256 Eingangsrahmen fertig sind.
-r 15
: Optional. Wählen Sie alle 4 Bilder eines aus, um die Größe zu verringern (4 == 60 / 15
).Damit heißt es,
identify out.gif
dass das GIF nur 64 Frames enthält.Es dauert immer noch 4 Sekunden, also wird die Verzögerung geändert, um eine Übereinstimmung zu erzielen.
-vf scale=512:-1
: Optional. Stellen Sie die Breite und die Höhe proportional ein, um die Größe zu verringern und Platz zu sparen.Um ImageMagick zum Laufen zu bringen, musste ich zuerst die Festplatten- und Speicherbeschränkungen
/etc/ImageMagick-6/policy.xml
wie folgt ändern : https://superuser.com/questions/1178666/imagemagick-convert-quits-after-some-pagesSiehe auch:
ImageMagick vs ffmpeg Benchmark
Ich habe die Befehle verglichen:
Die Befehle wurden so konstruiert, dass sie möglichst nahe beieinander liegen, um den Vergleich gültig zu machen:
/usr/bin/time -v
: wird verwendet, um die maximale Speichernutzung zu ermitteln, wie unter https://stackoverflow.com/questions/774556/peak-memory-usage-of-a-linux-unix-process erläutert-deconstruct
: GIF-Bilder können nur das minimal geänderte Rechteck aus dem vorherigen Frame enthalten, um das GIF zu verkleinern.ffmpeg
berechnet diese Unterschiede standardmäßig, ImageMagick jedoch nicht, es-deconstruct
sei denn, es wird verwendet.Grundsätzlich möchten Sie diese Option jedes Mal mit ImageMagick verwenden.
Wir können den Unterschied beobachten mit:
Bei der komprimierten Version sind alle Frames kleiner als die ursprüngliche, z. B .:
In diesem Beispiel ist der zweite Frame nur
516x516
anstelle des vollen 1024x1024 und wird mit einem Versatz von platziert252+257
. Es enthält also nur das mittlere Dreieck.Siehe auch: Wie kann ich mit ImageMagick die Größe einer animierten GIF-Datei ändern?
-delay
: Wert, der mit den 60 fps von übereinstimmtffmpeg
. Sollte für die Conversion-Leistung keine Rolle spielen, aber ich möchte es nicht riskieren.Die ausgegebenen GIFs sind ungefähr gleich groß und sehen optisch identisch aus.
Wir bekommen für ImageMagick:
und für ffmpeg:
von dem wir sehen, dass:
Testhardware : Lenovo ThinkPad P51 Laptop , Intel Core i7-7820HQ, 32 GB (16 + 16) DDR4 2400 MHz SODIMM, 512 GB SSD PCIe TLC OPAL2.
quelle
-r
und verwendet-v
, dennoch ist das Ausgabe-GIF von viel geringerer Qualität als die ursprünglichen PNG-Dateien. Wie behalte ich die gleiche Qualität von GIF wie bei PNG-Dateien?-framerate 60 -r 60
. Untersuchen Sie das generierte GIF und geben Sie Bilder mit den ImageMagick-Tools einidentify
, um herauszufinden, was gerade passiert .Sie können ein Programm namens convert verwenden, das im imagemagick-Paket enthalten ist. Es ist befehlszeilengesteuert, aber sehr einfach zu bedienen. Installieren Sie es entweder über das Software Center oder rufen Sie eine Eingabeaufforderung auf und geben Sie Folgendes ein
Nun erstellen Sie das GIF.
* Beachten Sie, dass das obige Beispiel direkt aus den Image Magick-Beispielen stammt
quelle
convert -delay 20 -loop 0 *.png out.gif
eine GIF-Schleife.