Wie generiere ich eine Vorschau aus mehreren Frames eines Videos mit FFmpeg?
- Einleitung
- Auswahl der Frames
- Frames zu einer Kontaktabzug-Collage zusammenfügen
- Alternative: animiertes GIF als Vorschau
- Weitere Optionen und Tipps
- Zusammenfassung
Einleitung
Wenn man aus einem Video eine Vorschau erstellen möchte, die mehrere einzelne Frames kombiniert, bietet FFmpeg eine Vielzahl von Möglichkeiten. Diese Vorschau kann beispielsweise als eine Bildübersicht in Form einer Kontaktabzug-großen Ansicht (Thumbnail-Collage) oder als animiertes GIF erzeugt werden. Im Folgenden wird Schritt für Schritt erklärt, wie du mit FFmpeg eine solche Vorschau generierst.
Auswahl der Frames
Zunächst musst du entscheiden, welche Frames der Videoquelle du extrahieren möchtest. Du kannst entweder gleichmäßig verteilte Frames aus dem gesamten Video extrahieren oder gezielt bestimmte Zeitpunkte auswählen. Um gleichmäßig verteilte Frames zu erhalten, kannst du beispielsweise eine feste Anzahl von Frames mit der Option -vf fps= auswählen oder einzelne Frames mit -ss an bestimmten Zeitpositionen ansteuern.
Beispiel, um 10 Frames pro Sekunde aus dem Video zu extrahieren:
ffmpeg -i input.mp4 -vf fps=1 thumb%03d.jpgDies erzeugt für jede Sekunde ein Bild (fps=1). Möchtest du nur eine bestimmte Anzahl an Frames, kannst du das entsprechend anpassen oder mit der Dauer des Videos multiplizieren.
Frames zu einer Kontaktabzug-Collage zusammenfügen
Nachdem du die benötigten Einzelbilder extrahiert hast, kannst du sie mit FFmpeg zu einem einzigen Bild mit mehreren Vorschaubildern anordnen. Hierfür eignet sich das tile-Filter. Dieses Filter legt die Bilder in einem rechteckigen Raster an, z.B. 5 Spalten mal 2 Zeilen.
Du kannst sowohl direkt aus dem Video eine Vorschau erstellen als auch aus bereits extrahierten Bildern arbeiten. Ein Beispiel, wie du direkt aus dem Video eine Kontaktabzug-Vorschau mit 10 Frames (5 Spalten x 2 Reihen) generierst:
ffmpeg -i input.mp4 -vf "fps=10,scale=320:240,tile=5x2" preview.jpgHierbei wird das Video auf 10 Frames pro Sekunde reduziert, jedes Bild auf 320x240 Pixel skaliert und dann das Tile-Filter genutzt, um daraus eine 5x2-Kachel zu erstellen. Das Ergebnis ist eine JPEG-Datei namens preview.jpg, die 10 Frames in einem Bild zusammenfasst.
Alternative: animiertes GIF als Vorschau
Eine beliebte Vorschauvariante ist ein animiertes GIF, das die ausgewählten Frames hintereinander abspielt. Dabei kannst du auch hier eine Frame-Rate definieren und die Größe anpassen.
Beispiel zur Erstellung eines animierten GIFs mit 10 Frames pro Sekunde, skaliert auf 320 Pixel Breite (die Höhe wird entsprechend angepasst):
ffmpeg -i input.mp4 -vf "fps=10,scale=320:-1:flags=lanczos" -gifflags +transdiff -y preview.gifDas Ergebnis ist eine animierte Vorschau, die sich z.B. gut für Webseiten oder Messenger eignet.
Weitere Optionen und Tipps
Mit FFmpeg kannst du noch weitere Einstellungen vornehmen. Möchtest du einzelne Bilder in benutzerdefinierten Zeitabständen extrahieren, kannst du die Option -ss in Kombination mit -frames:v 1 verwenden. Wenn du viele Bilder extrahierst, kannst du ein Skript schreiben, das diese dann zu einer Gesamtcollage zusammensetzt.
Beispielsweise kannst du eine Reihe von Einzelbildern (thumbnail001.jpg, thumbnail002.jpg etc.) mit FFmpeg in eine Collage einfügen, indem du sie per Input übergibst und das Filtergraph entsprechend nutzt oder du verwendest ImageMagick für noch komplexere Layouts.
Zusammenfassung
Mit FFmpeg ist es relativ einfach, eine Vorschau aus mehreren Video-Frames zu erzeugen. Möchtest du eine Kontaktabzug-Ansicht, kannst du das tile-Filter verwenden. Für animierte Vorschauen erzeugst du besser ein GIF oder ein Video aus den gefilterten Frames. Durch die Kombination von Filteroptionen wie fps (zur Frame-Rate-Reduzierung), scale (zur Größenanpassung) und tile (für die Anordnung der Frames) erreichst du flexible Anpassungen und kannst deine Vorschau passgenau erzeugen.
