web-dev-qa-db-de.com

Wie konvertiere ich Videos in Bilder?

Wie kann ich eine Videodatei in eine Folge von Bildern konvertieren, zum Beispiel alle N Sekunden ein Bild. Kann mplayer oder ffmpeg das? Ich habe MPlayer verwendet, um Screenshots manuell aufzunehmen, möchte dies jedoch für ein langes Video automatisieren.

66
Liam
mplayer -vo jpeg -sstep 5 file.avi

speichert alle 5 Sekunden einen Frame als JPEG-Datei.

Es wird jedoch nicht am Ende der Datei angehalten, sondern es werden weiterhin Kopien des letzten Frames erstellt. Um dies zu vermeiden, ermitteln Sie die Dauer des Videos in Sekunden mit einem anderen Player oder mit mplayer:

mplayer -vo null -ao null -frames 0 -identify file.avi

und suchen Sie nach einer Zeile wie "ID_LENGTH = 147.00".

Subtrahieren Sie 2 von der Länge und verwenden Sie diesen Wert für die Option -endpos. Beispiel für ein 147 Sekunden langes Video:

mplayer -vo jpeg -sstep 5 -endpos 145 file.avi
27
Liam

Es ist sehr einfach mit ffmpeg, und es kann gibt alle N Sekunden einen Frame aus ohne zusätzliches Scripting. Zum Exportieren als Bildsequenz verwenden Sie einfach myimage_%04d.png oder ähnliches als Ausgabe. Das %0xd-Bit wird in eine mit Nullen aufgefüllte Ganzzahl konvertiert x Ziffern lang - das angegebene Beispiel wird als myimage_0000.png myimage_0001.png usw. ausgegeben. Sie können viele Standbildformate verwenden, png, jpeg, tga, was auch immer (siehe ffmpeg -formats für eine vollständige Liste).

Ok, um als Bildsequenz zu exportieren, können wir ein Bildformat als Ausgabe mit einem sequentiellen Dateinamen verwenden, aber wir wollen nicht jeden einzelnen Frame exportieren. Ändern Sie also einfach die Bildrate der Ausgabe mit der Option -r n auf die gewünschte Größe, wobei n die Anzahl der Bilder pro Sekunde ist. Ein Frame pro Sekunde wäre -r 1, ein Frame alle vier Sekunden wäre -r 0.25, ein Frame alle zehn Sekunden wäre -r 0.1 und so weiter.

Alles in allem würde dies so aussehen, als würde alle vier Sekunden ein Frame von input.mov in output_0000.png, output_0001.png usw. gespeichert.

ffmpeg -i input.mov -r 0.25 output_%04d.png

Ändern Sie% xd auf die Anzahl der benötigten Stellen, z. Wenn der Befehl mehr als 10.000 Frames erzeugen würde, ändern Sie den %04d in %05d. Dies funktioniert auch für Eingabedateien mit Bildsequenzen. Lesen Sie mehr hier .

Windows-Benutzer: Verwenden Sie in der Befehlszeile %

beispiel: ffmpeg -i inputFile.mp4 -r 1 outputFile_%02d.png

Verwenden Sie in CMD- und BAT-Skripten %%

beispiel: ffmpeg -i inputFile.mp4 -r 1 outputFile %%02d.png

Verwenden Sie in Skripten nicht nur einen % und in der Befehlszeile keinen %%. In beiden Situationen wird ein Fehler generiert.

64
stib

Mit ffmpeg können Sie Folgendes tun:

ffmpeg -ss 4 -i input.avi -s 320x240 -frames:v 1 output.jpg

Dieser Befehl generiert in der 4. Sekunde des Videos ein JPG-Miniaturbild in der Größe 320 × 240. Fügen Sie dies in ein Skript ein, das die Uhrzeit und den Dateinamen ändert, und Sie sind fertig.

Weitere Informationen: Erstellen Sie alle X Sekunden ein Miniaturbild des Videos

11
Nifle

Wenn Sie nach einer Art von Kontaktformular suchen und mit einem Unix-ähnlichen Betriebssystem arbeiten, können Sie dieses aufwändige Skript verwenden, das auf den Punkt Video-Kontaktformular * NIXaufgerufen wird. _, kurz vcs .

Im Hintergrund wird auch ffmpeg (standardmäßig) oder mplayer verwendet, sodass viele Videoformate verarbeitet werden können. Es automatisiert den Prozess der Aufnahme von Standbildern aus dem Film und setzt diese zu einem Bild mit Kopf- und Fußzeile zusammen. Sie können z. Wie viele Captures möchten Sie oder alternativ die Zeitunterschiede zwischen ihnen.

Für ein Intervall von 10 Minuten sieht der Aufruf folgendermaßen aus:

vcs -i 10m input.avi

Überprüfen Sie die vollständige Liste der Befehlszeilenoptionen für einige andere Optimierungen.

Hier ist ein Beispiel für ein Kontaktformular, entnommen von der Homepage :

enter image description here

8
mpy

Ab VLC 1.1.0 können Sie den Szenenvideofilter verwenden:

vlc C:\video\to\process.mp4 --rate=1 --video-filter=scene --vout=dummy --start-time=10 --stop-time=11 --scene-format=png --scene-ratio=24 --scene-prefix=snap --scene-path=C:\path\for\snapshots\ vlc://quit

Das obige speichert 1 von 24 Bildern (--scene-ratio = 24), beginnend um 00:00:10 und endend um 00:00:11.

Gerade getestet und bestätigt, dass dies mit VLC 2.0.3 unter einer neuen Windows 8-Installation funktioniert (ich habe keine zusätzlichen Video-Plugins oder Software).

Vollständige Dokumentation: http://wiki.videolan.org/How_to_create_thumbnails

7
Michael

VirtualDub kann dies für Sie tun

File -> Export -> Image sequence

enter image description here

2
Shevek

Sie könnten dies auch versuchen

von der VLC-Befehlszeile ...

vlc "C:\DEIN\file\path\file.avi" -V image --image-out-prefix = capname --image-out-ratio = 60

file.avi ist das Video, von dem Sie aufnehmen möchten, capname ist das Präfix der gespeicherten Bilder, möglicherweise möchten Sie mit dem Verhältnis herumspielen (60 bedeutet, dass 1 von 60 Bildern aufgenommen wird). Sie können beispielsweise weitere Befehle hinzufügen --image-out-format jpeg speichert Ihre Großbuchstaben als JPEGs anstelle von PNGs. --snapshot-path legt fest, wo Sie Ihre Großbuchstaben speichern möchten.

Quelle von oben

1
Nifle

Sie können Frames in VirtualDub überspringen. Verwenden Sie einfach die Option "Decimate By" im Menü Video -> Frame Rate. Wenn Sie beispielsweise "Dezimieren um 100" festlegen und dann "Datei -> Exportieren -> Bildsequenz" wählen, wird nur jedes 100. Einzelbild gespeichert.

1
Alex