Quick Tipp: Video zu Gif mittels FFmpeg
Wenn man z.B. für einen Blogpost aus dem vom iOS Simulator aufgenommenen MP4-Video ein Gif erstellen will, kann man auf diverse Online-Konverter zurückgreifen. Aber geht das auch lokal auf dem Rechner? Klar, zum Beispiel mit dem Kommandozeilentool FFmpeg:
ffmpeg -ss 0 -t 1.5 -i shimmer.mp4 -vf "fps=20,scale=250:-1:flags=lanczos" -loop 0 shimmer1.gif
Kurz zu dem Befehl:
- -ss und -t stehen für Startpunkt und Dauer des Inputs, der verarbeitet werden soll:
In unserem Fall von 0s bis 1,5s. - -i shimmer.mp4 beschreibt den Video-Input, aus dem das Gif erstellt wird.
- -vf ist der verwendete Filtergraph: Hier definieren wir die FPS und skalieren den Output auf 250px Breite, -1 setzt die Höhe automatisch proportional und das flag=lanczos definiert den Skalierungsalgorithmus.
- -loop 0 setzt das Gif auf dauerhafte Wiederholung, -1 würde es deaktivieren. Alle positiven Werte geben entsprechend an, wie oft das Gif loopt.
Das Ergebnis sieht man rechts.
In diesem Beispiel leidet aber die Qualität. Das Format Gif nutzt hier eine Standartpalette mit 256 Farben. Für alles dazwischen wird auf Dithering zurückgegriffen, daher das markante Punkteraster.
Wer eine höhere Bildqualität auf Kosten von etwas mehr Speicherplatz will, kann eine eigene Palette erzeugen lassen, indem der Befehl wie folgt erweitert wird:
ffmpeg -ss 0 -t 1.5 -i shimmer.mp4 -vf "fps=20,scale=250:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" -loop 0 shimmer2.gif
Die neuen Keywords palettegen und paletteuse sorgen dafür, dass eine Palette spezifisch für den gegebenen Video-Stream erzeugt und angewendet wird. Split sorgt dafür, dass jeder Frame übergeben wird und damit alles in einem Befehl passiert.
Damit steigt die Dateigröße von 63KB auf 250KB an, aber - wie im Ergebnis rechts zu sehen - auch die Qualität deutlich.
Wer tiefer in die Theorie dahinter einsteigen und mit den verschiedenen Optionen, die palettegen und paletteuse noch unterstützen, spielen will, sollte einen Blick in diesen Blogpost werfen.
Links
- ffmpeg: https://ffmpeg.org
- Dithering (Wikipedia): https://de.wikipedia.org/wiki/Dithering_(Bildbearbeitung)
- High quality GIF with FFmpeg (Blog): http://blog.pkh.me/p/21-high-quality-gif-with-ffmpeg.html