Videos automatisiert screenshotten / Storybook

Um Videos zu Papier zu bringen gibt es nur zwei Methoden. Entweder Du machst eine schriftliche Videobeschreibung oder Du machst Screenshots. Natürlich bieten Videoplayer wie z.B. der vlc an, Screenshots aus einem Video zu fertigen. Wenn Du diese aber nun händisch machen musst, kann das ganz schön aufwändig werden.

Aber auch ein anderes Szenario ist denkbar. Du vermutest, dass in einem Video ein anderes Video versteckt sein könnte. Natürlich kannst Du die Abspielgeschwindigkeit erhöhen, aber dennoch ist das Betrachten des Videos viel zeitaufwändiger als wenn du eine Übersicht von Screenshots durchzusehen hättest.

Der VLC bietet dir die Möglichkeit automatisiert Screenshots aus einem Video anzufertigen. (Weiter unten zeige ich Dir eine noch schnellere Möglichkeit als die mit VLC)

Hierfür gehst Du in die Einstellungen: Zuerst klickst Du oben auf Werkzeuge, dann auf Einstellungen. Jetzt musst du unten links „Alle“ anwählen.

In der veränderten Oberfläche navigierst du links zu Videos.

Hier Du das Verzeichnis angeben, in dem die Screenshots gespeichert werden.

Jetzt wechselst Du links auf Filter und aktivierst den Szenenfilter.

Danach kannst Du die Einstellungen speichern.
Wenn du jetzt einen Film startest, werden automatisch Screenshots aus dem Film gemacht. In meinem Test war es jede Sekunde ein Screenshot. Ich habe leider noch nicht herausgefunden, wie man die Anzahl der Screenshots reduzieren kann.

Es geht einfacher und schneller

Wenn du ein Linux hast, geht das allerdings auch viel einfacher mit der Bash. Mit ffmpeg kannst du sehr einfach aus einem Video Screenshots machen. In folgendem Beispiel werden von dem Film 60 Screenshot gefertigt. Dort wo Video.mp4 steht, trägst Du deine Videodatei ein. Und falls du das Wort thumbnail gegen ein anderes Wort austauschen willst, ist das auch kein Problem. Lediglich das %3d sollte erhalten bleiben, weil es für die fortlaufende Nummern sorgt. Solltest Du mehr als 999 Screenshots machen wollen, mußt du aus dem %3d ein %4d machen um eine vierstellige fortlaufende Zahl zu bekommen. Und natürlich benötigt die erzeugte Datei auch eine Dateiendung. Ob das nun .png oder .jpg ist, spielt keine Rolle.

Etwas Mathematik benötigst Du um herauszufinden, wie viele Screenshots in welchem Abstand Du machen willst. Bei fps=1 wird jede Sekunde ein Screenshot gemacht. Bei fps=2 sind es 2 Screenshots pro Sekunde. Bei fps=0.5 werden alle 2 Sekunden ein Screenshot gemacht. D.h. bei einem 4 Minuten Video mit fps=1 benötigst du 4×60 Frames also 240 Frames um das Video komplett zu screenshotten. Bei fps=0.1 wären es 24 Frames (1 Frame all 10 Sekunden). Wichtig: Achte auf die englische Schreibweise des Nachkommastellentrenners, denn der ist im englischen der Punkt und nicht das Komma.

Zum Verständnis: Wenn du bei einem Video weniger als die errechneten Frames angibst, werden am Ende des Videos keine Screenshots gefertigt. ffmpeg fängt vorne an und macht Screenshots, bis die gewünschte Screenshotanzahl erreicht ist.

Um den Befehl auszuführen, öffnest Du ein Terminal und navigierst in den Ordner in dem die Datei ist, oder Du navigierst mit dem Dateiexplorer zu der Datei und klickst mit der rechten Maustaste in den Ordner und wählst „Im Terminal öffnen aus“. Danach kannst du den Befehl in das Terminal kopieren (vorher noch die Dateiamen, fps und die Framesanzahl anpassen) und mit Enter löst du den Befehl aus. Die Thumbnails werden in dem Ordner angelegt, in dem Du gerade bist.

ffmpeg -i Video.mp4 -vf fps=1 -frames:v 60 thumbnail_%3d.png

ffmpeg ist dabei wesentlich schneller als vlc, es dauerte auf meinem System nur eine Sekunde bis die Screenshots aus einem 3 Minuten Video extrahiert waren.

Achte darauf, dass Dateinamen (z.B. der vom Video) keine Leerzeichen enthalten. Sonst musst du im Befehl vor jedes dieser Leerzeichen einen \ stellen, oder den Dateinamen mit doppelten Anführungszeichen einrahmen.

ffmpeg -i "heruntergeladenes Video.mp4" -vf fps=1 -frames:v 60 thumbnail_%3d.png
ffmpeg -i heruntergeladenes\ Video.mp4 -vf fps=1 -frames:v 60 thumbnail_%3d.png