Wie extrahiere ich alle N Sekunden ein Bild eines Videos in ein Bild?

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

8 answers

Es ist sehr einfach mit ffmpeg, und es kann alle N Sekunden einen Frame ausgeben ohne zusätzliches Scripting. Um als Bildsequenz zu exportieren, verwenden Sie einfach myimage_%04d.png oder ähnliches als Ausgabe. Das %0xd - Bit wird in eine mit Null aufgefüllte Ganzzahl x Ziffern lang konvertiert - das Beispiel, das ich gegeben habe, wird als{[31] ausgegeben]}

  • myimage_0000.png,

  • myimage_0001.png,

  • myimage_0002.png

    Etc..

Sie können viele Standbildformate verwenden, png, jpeg, tga, was auch immer (siehe ffmpeg -formats für eine vollständige Liste).

Ok, jetzt wissen wir, wie man den Film als Bildsequenz exportiert, aber sagen wir, wir wollen nicht jedes einzelne Bild exportieren?

Der Trick besteht darin, einfach die Bildrate der Ausgabe mit der Option -r n zu ändern, wobei n die Anzahl der Bilder pro Sekunde ist. 1 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 auf.

Um alles zusammenzufassen, würde es so aussehen, alle vier Sekunden einen Frame von input.mov zu speichern, um output_0000.png, output_0001.png etc.:

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

Beachten Sie, dass die Option -r 0.25 nach dem Teil -i input.mov, da sie die Bildrate der Ausgabe . Wenn Sie es vor der Eingabe setzen, würde es die Eingabedatei so behandeln, als hätte es die angegebene Framerate.

Ändern Sie das %xd in die Anzahl der benötigten Ziffern, z. B. wenn der Befehl erstellen würde mehr als 10.000 Frames ändern die %04d in %05d. Dies funktioniert auch für Eingabedateien, die Bildsequenz sind. 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

Also double %% in Skripten und single % in der interaktiven Befehlszeile. Wenn Sie es in beiden Situationen falsch machen, wird ein Fehler generiert.

 84
Author: stib,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2020-06-12 13:48:39
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 weiterhin Kopien des letzten Frames erstellt. Um dies zu vermeiden, finden 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. Zum Beispiel für ein 147-Sekunden-Video:

mplayer -vo jpeg -sstep 5 -endpos 145 file.avi
 31
Author: Liam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2014-03-14 13:01:22

Mit ffmpeg, sie können Folgendes tun:

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

Dieser Befehl erzeugt eine 320×240 große JPG-Miniaturansicht in der 4. Sekunde im Video. Fügen Sie dies in ein Skript ein, das die Uhrzeit und den Dateinamen ändert, und Sie sind fertig.

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

 14
Author: Nifle,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2016-01-15 22:35:26

Wenn Sie nach einer Art Kontaktblatt suchen und mit einem Unix-ähnlichen Betriebssystem arbeiten, können Sie dieses aufwändige Skript verwenden, das auf den Punkt gebracht wird Videokontaktblatt *NIX, kurz vcs.

Im Hintergrund verwendet es auch ffmpeg (standardmäßig) oder mplayer und kann daher viele Videoformate verarbeiten. Es automatisiert den Prozess der Aufnahme von Standbildern aus dem Film und komponieren diese zu einem Bild mit einigen Kopf-und Fußzeile. Sie können z.B. wählen, wie viele wenn Sie möchten oder alternativ die Zeitunterschiede zwischen ihnen.

Für ein Intervall von 10 Minuten ist der Aufruf wie folgt:

vcs -i 10m input.avi

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

Hier ist ein Beispiel-Kontaktblatt, entnommen aus der Homepage:

geben Sie hier die Bildbeschreibung ein

 8
Author: mpy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2014-08-16 12:41:11

Mit VLC 1.1.0 und höher 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 bei 00:00:10 und endend bei 00:00:11.

Ich habe gerade getestet und bestätigt, dass dies mit VLC 2.0.3 auf 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
Author: Michael,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2012-09-11 03:17:14

VirtualDub kann dies für Sie tun

File -> Export -> Image sequence

geben Sie hier die Bildbeschreibung ein

 2
Author: Shevek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2011-08-11 16:55:20

Sie könnten dies auch versuchen

Über die VLC-Befehlszeile...

Vlc "C:\YOUR\file\path\file.avi" -V Bild --Bild - -aus-prefix=capname -- bild-aus-Verhältnis=60

- Datei.avi ist das video, das Sie wollen capture from, capname ist das Präfix von die gespeicherten Bilder, möchten Sie vielleicht spielen Sie mit dem Verhältnis (60 bedeutet dass 1 von 60 Bildern aufgenommen wird) Sie können weitere Befehle hinzufügen, zum Beispiel -- image-out - Format jpeg speichert Ihre Caps als jpegs statt der von pngs, -- snapshot-Pfad können Sie wählen, wo Sie Ihre Caps speichern.

Quelle von oben

 1
Author: Nifle,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2010-04-27 16:22:46

Sie können Frames in VirtualDub überspringen. Verwenden Sie einfach die Option "Dezimieren nach" im Menü Video - > Bildrate. Wenn Sie beispielsweise "Um 100 dezimieren" festlegen und dann Datei -> Export -> Bildsequenz verwenden, wird nur jeder 100.

 1
Author: Alex,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2011-11-30 22:06:24