Ich möchte .gif
aus einem .mp4
Video eine Animation machen . Ich würde es vorziehen, es von der Kommandozeile aus zu tun, also bitte nur Kommandozeilen-Tools auflisten.
command-line
mp4
gif
Maythux
quelle
quelle
Antworten:
ffmpeg
3.4.4 kann es direkt auf Ubuntu 18.04 machenSie möchten wahrscheinlich Folgendes verwenden:
Testdatengenerierungsverfahren in diesem Beitrag beschrieben .
Ein direkter:
funktioniert auch, aber das ausgegebene GIF wäre viel größer als das eingegebene Video, da Videoformate intelligent über Frames hinweg komprimiert werden.
Aufschlüsselung der Argumente:
ulimit -Sv 1000000
: Stellen Sie eine maximale Speichergröße von 1 GB für das Programm ein.Meistens stelle ich sicher, dass der Befehl nicht wie bei früheren Versuchen unbegrenzten Speicher belegt.
Mit 500 MB kann ffmpeg keine gemeinsam genutzten Bibliotheken laden.
-ss 00:00:03 -to 00:00:06
: Start- und Endzeit, von der aus das Video geschnitten werden soll.Nein, GIFs sind nicht der beste Weg , um
PiratenVideos verteilen online.Siehe auch: https://stackoverflow.com/questions/18444194/cutting-the-videos-based-on-start-and-end-time-using-ffmpeg
-vf scale=512:-1
: Legt die512
Höhe der Ausgabepixel fest und passt die Breite an, um das Seitenverhältnis beizubehalten.Dies ist ein häufiger Anwendungsfall für Bilder für das Web, die in der Regel eine viel geringere Auflösung als Videos haben.
Wenn Sie diese Option entfernen, hat das ausgegebene GIF die gleiche Höhe wie das eingegebene Video.
Die Original - Video Höhe kann mit zum Beispiel gefunden werden
ffprobe
: https://superuser.com/questions/595177/how-to-retrieve-video-file-information-from-command-line-under-linux/1035178#1035178 und ist 1024 x 1024 in unserem Fall.-r 15
: Abtastung FPS.Das Originalvideo hatte beispielsweise 30 FPS. Das
-r 15
bedeutet, dassffmpeg
alle 2 Bilder ein Einzelbild ausgewählt werden (= 30 / 15
).Die wahrgenommene Ausgabefrequenz wird jedoch an die Eingabe angepasst, sodass Sie keine Beschleunigung bemerken, sondern nur eine größere Granularität.
Die Eingangs-FPS finden Sie mit
ffprobe
und die Gesamtzahl der Eingangs-Frames finden Sie mitmediainfo
: https://superuser.com/questions/84631/how-do-i-get-the-number-of-frames -in-einem-video-auf-der-linux-befehlszeile / 1044894 # 1044894Ich empfehle diese Option, da Videoformate aufgrund der höheren Auflösung normalerweise eine höhere Bildrate haben. Bei kleineren GIFs fällt die niedrigere Framerate weniger auf, sodass wir einige Frames überspringen und kleinere GIFs erstellen können.
Vor dem 18.04 .:
ffmpeg
+convert
Einzeiler ohne Zwischenfeilenffmpeg
konnte zuvor nicht mit GIF umgehen. Das Beste, was ich hatte, war etwas zusammen:Erklärung einiger Argumente:
-loop 0
: Füge das Netscape Gif Extension Loop Count Feld zur Ausgabe hinzu. 0 bedeutet Endlosschleife, wie beschrieben unter: http://www.vurdalakov.net/misc/gif/netscape-looping-application-extensioneog
,firefox
und Chrom schleift standardmäßig unendlich, auch ohne, daher bin ich mir nicht sicher, wie notwendig es ist ist mehr.-delay 5
: Wartezeit vor dem Anzeigen des nächsten Frames in Hundertstelsekunden, wie beschrieben unter: https://en.wikipedia.org/wiki/GIF#Animated_GIF Byte 324. Das100
bedeutet also 1 FPS,5
bedeutet1 / 0.5 == 20FPS
.Selbst wenn Sie die Höhe und Bildrate verringern, ist das ausgegebene GIF möglicherweise immer noch größer als das Video, da "echte" Nicht-GIF-Videoformate über Frames hinweg komprimiert werden, während GIF nur einzelne Frames komprimiert.
Eine direkte:
hat funktioniert, aber fast meinen Computer wegen Speicherüberlaufs getötet und einen 100-mal größeren Output für meine 2s 1Mb-Eingabedatei erzeugt. Vielleicht holt ImageMagick eines Tages auf.
Siehe auch: https://superuser.com/questions/556029/how-do-i-convert-a-video-to-gif-using-ffmpeg-with-reasonable-quality
Getestet unter Ubuntu 17.10.
quelle
scale=320:-1
-r 10
wird das GIF auf die normale Geschwindigkeit zurückgesetzt.Zwei schritte:
Extrahieren Sie Bilder aus Video
Erstellen Sie ein Verzeichnis mit dem Namen frames im selben Verzeichnis wie Ihre
.mp4
Datei. Befehl verwenden:Quelle
Bilder in GIF konvertieren
Docs: Konvertiere GIF-Optionen
Sie werden am Ende eine ziemlich große Datei haben. Sehen Sie sich die Anleitung zur Bildbearbeitung an, um die GIF- Optionen zu optimieren , die Sie zum Befehl für den zweiten Schritt hinzufügen können, um eine kleinere Datei zu erhalten.
quelle
frames
Ordner vorhanden sein muss, damit der erste Befehl ausgeführt werden kann.-layers Optimize
den letztenconvert
Befehl hinzu*.jpg
. Überprüfen Sie die Ausgabe, es könnte jedoch betroffen sein. Für mich hat es die GIF-Größe von 5 MB auf 700 KB reduziert, ohneffmpeg -i video.mp4 -r 5 'frames/frame-%03d.png'
.gifify ist ein All-in-One-Dienstprogramm, das die Konvertierung vereinfacht. Es hängt davon ab
nodejs
,npm
,ffmpeg
, undimagemagick
die in der repos alle zur Verfügung stehen.Sobald Sie
npm
installiert haben, können Siegifify
global installieren mit:Ein Video kann in ein .GIF konvertiert werden mit:
Optional können Sie auch eine Start- und Endposition im Video festlegen und eine Textbeschriftung hinzufügen:
❗️ Es kann einige Minuten dauern, bis die Konvertierung auch bei kleineren Videos abgeschlossen ist.
quelle
gifsicle
, aber dann tritt ein anderes Problem auf: github.com/vvo/gifify/issues/95 Würden Sie uns auch gerne mitteilen , welche Verzeichnisse npm novices ausführen sollennpm install
und ob sie als root ausgeführt werden sollen oder nicht? Vielen Dank!