Ich konvertiere einen FLV
Film in eine GIF
Datei mit ffmpeg.
ffmpeg -i input.flv -ss 00:00:00.000 -pix_fmt rgb24 -r 10 -s 320x240 -t 00:00:10.000 output.gif
Es funktioniert sehr gut, aber die Ausgabe-GIF-Datei hat eine sehr niedrige Qualität.
Irgendwelche Ideen, wie ich die Qualität von konvertiertem GIF verbessern kann?
Ausgabe des Befehls:
ffmpeg -i input.flv -ss 00:00:00.000 -pix_fmt rgb24 -r 10 -s 320x240 -t 00:00:10.000 output.gif
ffmpeg version 0.8.5-6:0.8.5-0ubuntu0.12.10.1, Copyright (c) 2000-2012 the Libav developers
built on Jan 24 2013 14:52:53 with gcc 4.7.2
*** THIS PROGRAM IS DEPRECATED ***
This program is only provided for compatibility and will be removed in a future release. Please use avconv instead.
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'input.flv':
Metadata:
major_brand : mp42
minor_version : 0
compatible_brands: isommp42
creation_time : 2013-02-14 04:00:07
Duration: 00:00:18.85, start: 0.000000, bitrate: 3098 kb/s
Stream #0.0(und): Video: h264 (High), yuv420p, 1280x720, 2905 kb/s, 25 fps, 25 tbr, 50 tbn, 50 tbc
Metadata:
creation_time : 1970-01-01 00:00:00
Stream #0.1(und): Audio: aac, 44100 Hz, stereo, s16, 192 kb/s
Metadata:
creation_time : 2013-02-14 04:00:07
[buffer @ 0x92a8ea0] w:1280 h:720 pixfmt:yuv420p
[scale @ 0x9215100] w:1280 h:720 fmt:yuv420p -> w:320 h:240 fmt:rgb24 flags:0x4
Output #0, gif, to 'output.gif':
Metadata:
major_brand : mp42
minor_version : 0
compatible_brands: isommp42
creation_time : 2013-02-14 04:00:07
encoder : Lavf53.21.1
Stream #0.0(und): Video: rawvideo, rgb24, 320x240, q=2-31, 200 kb/s, 90k tbn, 10 tbc
Metadata:
creation_time : 1970-01-01 00:00:00
Stream mapping:
Stream #0.0 -> #0.0
Press ctrl-c to stop encoding
frame= 101 fps= 32 q=0.0 Lsize= 8686kB time=10.10 bitrate=7045.0kbits/s dup=0 drop=149
video:22725kB audio:0kB global headers:0kB muxing overhead -61.778676%
Vielen Dank.
Antworten:
ffmpeg
Beispiel183k
ffmpeg
kann qualitativ hochwertiges GIF ausgeben. Es wird immer empfohlen, eine aktuelle Version zu verwenden: Herunterladen oder Kompilieren .-ss 30
) der Eingabe übersprungen und eine Ausgabe von 3 Sekunden (-t 3
) erstellt.-loop
Ausgangsoption. Ein Wert von0
ist Endlosschleife.Siehe Hochwertige GIF mit FFmpeg für viele weitere Beispiele und Optionen.
Imagemagick
convert
Beispiel227k
Eine andere Befehlszeilenmethode ist die Weiterleitung von ImageMagick
ffmpeg
nachconvert
(odermagick
).Bildrate einstellen
Stellen Sie die Bildrate mit einer Kombination der
fps
Filter inffmpeg
und-delay
in einconvert
. Dies kann kompliziert werden, daconvert
nur ein Rohdatenstrom von Bildern abgerufen wird, sodass keine Bilder pro Sekunde erhalten bleiben. Zweitens ist der-delay
Wert inconvert
ist in Ticks (es gibt 100 Ticks pro Sekunde), nicht in Frames pro Sekunde. Zum Beispiel mitfps=12.5
= 100 / 12.5 = 8 =-delay 8
.convert
Rundet den-delay
Wert auf eine ganze Zahl, sodass 8,4 zu 8 und 8,5 zu 9 führen. Dies bedeutet effektiv, dass nur einige Frameraten unterstützt werden, wenn eine einheitliche Verzögerung für alle Frames eingestellt wird (eine bestimmte Verzögerung kann pro Frame eingestellt werden, die jedoch darüber hinausgeht diese Antwort).-delay
scheint ignoriert zu werden, wenn es als Ausgabeoption verwendet wird, daher muss es zuvor verwendet werden,-
wie im Beispiel gezeigt.Schließlich können Browser und Bildbetrachter eine Mindestverzögerung implementieren, sodass Ihre
-delay
ohnehin ignoriert werden können.Video mit freundlicher Genehmigung des National Conservation Training Center des US Fish & Wildlife Service.
quelle
-vf scale=320:-1,format=rgb8,format=rgb24
convert
Befehl zum Konvertieren von PNG-Frames habe ich letztendlich verwendetconvert -delay 5 -loop 0 -dither None -colors 80 "frames/ffout*.png" -fuzz "40%" -layers OptimizeFrame "output.gif"
, wodurch sich die Gesamtgröße der Datei erheblich verringertscale=0:-1
, also wenn Sie die Skala auf einstellen0
, wird es die Skala aus dem Video nehmen.Wenn Sie Zwischenbilddateien vermeiden möchten, können die von LordNeckBeard bereitgestellten Befehle zwischen
ffmpeg
und den Befehlen von ImageMagick weitergeleitet werden,convert
sodass keine Zwischenbilddateien erforderlich sind:Im
-f image2pipe
Befehl ffmpeg wird angegeben, dass das Video in Bilder aufgeteilt werden soll, damit es weitergeleitet werden kann, und-vcodec ppm
das Ausgabeformat wird auf ppm festgelegt (aus irgendeinem Grundconvert
liest das Format png entweder nicht alle Bilder aus der Pipe oder ffmpeg nicht alle ausgeben). Der-
Befehl für beide Befehle gibt an, dass eine Pipe für die Ausgabe bzw. die Eingabe verwendet wird.Um das Ergebnis zu optimieren, ohne eine Datei zu speichern, können Sie die Ausgabe
convert
an einen zweitenconvert
Befehl weiterleiten:Der
gif:-
Befehl weist Sieconvert
an, die Ausgabe als gif-formatierte Daten weiterzuleiten und-layers Optimize
den zweiten Befehlconvert
auszuführenoptimize-frame
und zuoptimize-transparancy
verwenden (siehe ImageMagick Einführung in die Animationsoptimierung ). Beachten Sie, dass die Ausgabe von-layers Optimize
möglicherweise nicht immer eine kleinere Dateigröße liefert. Sie können daher versuchen, eine Konvertierung in ein GIF ohne Optimierung durchzuführen, um sicherzugehen.Denken Sie daran, dass sich während des gesamten Vorgangs alles im Speicher befindet, sodass Sie möglicherweise ausreichend Speicher benötigen, wenn die Bilder sehr groß sind.
quelle
avconv
convert -delay 5 -loop 0 -layers Optimize - output.gif
split
Filter in ffmpeg verwenden. Keine Notwendigkeit, etwas zuffmpeg -ss 30 -t 3 -i "input.flv fps=10,scale=320:-1:flags=lanczos,split[x][z];[z]palettegen[y];[x][y]paletteuse" output.gif
Ab ffmpeg 2.6 können wir noch besser:
HT
quelle
Ich habe eine eigene Version des Skripts erstellt, die auch die Ausgabeauflösung und die Bildrate parametrisiert.
Laufen
./gifenc.sh input.mov output.gif 720 10
wird 720p 10fps GIF von dem Film ausgeben, den Sie ihm gegeben haben. Möglicherweise müssen Siechmod +x gifenc.sh
für die Datei tun .Sie können die Details auf meinem Github lesen
Annahmen: ffmpeg ist installiert und das Skript befindet sich im selben Ordner wie die anderen Dateien.
quelle
Die Antwort von @Stephane ist sehr gut. Aber es wird eine Warnung wie
Buffer queue overflow, dropping.
bei einigen Videos angezeigt, und bei dem generiertengif
ist ein Teil des Frames gefallen.Hier ist eine bessere Version mit
fifo
Filter, umBuffer queue overflow
bei der Verwendung vonpaletteuse
Filter zu vermeiden . Verwenden Siesplit
Filter, um die Erstellung einer PNG-Datei für die Zwischenpalette zu vermeiden.quelle
fifo
zwischeno2
und geseheno3
? Um dieBuffer queue overflow
Warnung zu vermeiden .habe ein script gemacht, getestet und funktioniert.
Verwendungszweck:
PHUN HABEN :)
vim avi2gif.sh
btw: vokoscreen ist ein AUSGEZEICHNETES ScreenCapturing-Tool für Linux :)
Vielen Dank Michael Kohaupt :) Rock stetig.
Einige Dateigrößenstatistiken:
5,3 M = vokoscreen-2015-04-28_15-43-17.avi -> vokoscreen-2015-05-28_12-41-56.avi.gif = 1013 K
Die Ergebnisse finden Sie hier.
quelle
Die
ffmpeg
mit Palette Verfahren kann in einem einzigen Befehl ausgeführt werden, ohne Vermittler -.png
Datei.Dies ist dank des
split
Filters möglich.quelle
Linux / Unix / macOS
Nach dem @ LordNeckbeard-Ansatz mit
ffmpeg
Befehl finden Sie die folgende nützliche Bash-Funktion, die in Ihre~/.bash_profile
Datei eingefügt werden kann:Sobald die Funktion geladen ist (manuell oder von
. ~/.bash_profile
), sollten Sie einen neuenvideo2gif
Befehl haben.Anwendungsbeispiel:
oder:
Mit 10 Bildern pro Sekunde auf 320 Breite skalieren.
Sie können auch ein anderes Videoformat (z. B. mp4) angeben.
Mac OS
Sie können die GIF-Brauerei- App ausprobieren , mit der Sie GIFs aus Videodateien erstellen können.
Alternativ gibt es mehrere Websites, die eine kostenlose Online-Konvertierung durchführen.
quelle
Bei der ausgewählten Antwort wird davon ausgegangen, dass Sie das Quellvideo skalieren und dessen fps im erstellten GIF ändern möchten. Wenn Sie dies nicht tun müssen, funktioniert Folgendes:
Dies hat sich als nützlich erwiesen, als ich ein GIF wollte, das das von mir verwendete Quellvideo originalgetreu wiedergibt.
quelle
Für Windows-Benutzer:
Erstellen Sie eine
video2gif.bat
Datei im Windows-Verzeichnis mit folgendem Inhalt:Und wo immer Sie es verwenden können, sehen Sie so aus:
Dann hast du
myvideo.gif
im aktuellen Verzeichnis.Wenn
myvideo.gif
es eine Frage gibt, die Sie beantworten müssen, um sie zu überschreiben.BEARBEITEN:
Ich schlage vor, dieses Batch-Skript zu verwenden: https://github.com/NabiKAZ/video2gif
quelle
fps=10
undscale=-1:-1
). Die Antwort von Sun hat uns bereits eine Batch-Datei gegeben, und diese hat (wie die Shell-Skripte in der Antwort von pje und die Antwort von thevangelist ) den Vorteil, dass sie die Liste der Filter einer Variablen ( einmal ) zuweist ,… (Fortsetzung)fps=10,scale=-1:-1
)? ( Ein Beispiel für die Erläuterung von Teilen eines Befehls finden Sie in der Antwort von aware .)Unten ist die Batch-Datei für Windows-Benutzer:
gifenc.bat:
Quelle: Hochwertiges GIF mit FFmpeg: Nur ein Beispiel extrahieren
Wenn Sie nur eine Eingabevariable verwenden möchten und der Ausgabename nur die Erweiterung GIF (ausgesprochen JIF) hat, verwenden Sie stattdessen Folgendes:
quelle
So fügen Sie einen Kontextmenüeintrag für Windows 7/10 mit der rechten Maustaste hinzu, um Ihre Videodatei in GIF zu konvertieren
In einigen anderen Antworten wurde das von mir verwendete video2gif- Skript erwähnt . Sie können jedoch jedes Skript verwenden.
Um die Kontextmenüoption zu erstellen, müssen Sie Ihre Registrierung bearbeiten. Öffnen Sie eine Powershell-Eingabeaufforderung mit Administratorrechten. Führen Sie diese Befehle aus:
Wenn Sie nun mit der rechten Maustaste auf eine Datei klicken, haben Sie die Option "Video2Gif ausführen"!
Übrigens habe ich ffmpeg auf installiert
C:\dev\ffmpeg\ffmpeg-3.4.2-win64-static\
und dasvideo2gif.bat
Skript in das Bin-Verzeichnis direkt daneben gestelltffmpeg.exe
. Ich habe auchC:\dev\ffmpeg\ffmpeg-3.4.2-win64-static\bin
zu meinen Fenstern hinzugefügtPATH
, aber ich glaube nicht, dass Sie müssen.Wenn Sie die Option möchten, dem Skript einige zusätzliche Befehlszeilenflags / -argumente zur Verfügung zu stellen
video2gif-prompt.bat
, erstellen Sie eine neue Datei mit dem Namen und lassen Sie die Registrierung darauf verweisen, anstattvideo2gif.bat
:Sie können immer noch einfach die Eingabetaste drücken, um die Standardeinstellungen schnell zu erhalten.
quelle