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 zu erstellen, möchte dies jedoch für ein langes Video automatisieren.
71
Antworten:
Mit ffmpeg ist dies sehr einfach und es kann alle N Sekunden ein Bild ohne zusätzliches Scripting ausgegeben werden . 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 umgewandeltx
- das Beispiel, das ich gegeben habe, wird ausgegeben alsmyimage_0000.png
,myimage_0001.png
,myimage_0002.png
usw..
Sie können eine Vielzahl von Standbildformaten (PNG, JPEG, TGA usw.) verwenden (
ffmpeg -formats
eine vollständige Liste finden Sie hier).Ok, jetzt wissen wir, wie man den Film als Folge von Bildern exportiert, aber sagen wir, wir wollen nicht jedes einzelne Bild exportieren?
Der Trick besteht darin, die Framerate der Ausgabe mithilfe der
-r n
Option, bei dern
die Anzahl der Frames pro Sekunde angegeben ist, einfach auf das zu ändern, was wir möchten . 1 Bild pro Sekunde wäre-r 1
, ein Bild alle vier Sekunden wäre-r 0.25
, ein Bild alle zehn Sekunden wäre-r 0.1
und so weiter.Also um es alle zusammen, das ist , wie es aussehen würde , einen Rahmen von speichern
input.mov
alle vier Sekundenoutput_0000.png
,output_0001.png
etc .:Beachten Sie, dass die
-r 0.25
Option hinter dem-i input.mov
Teil steht, da sie die Bildrate der Ausgabe steuert . Wenn Sie es vor die Eingabe stellen, wird die Eingabedatei so behandelt, als ob sie die angegebene Bildrate hätte.Ändern Sie% xd auf die Anzahl der benötigten Stellen, z. B. wenn der Befehl mehr als 10.000 Frames erstellen würde, ändern Sie den Wert
%04d
auf%05d
. Dies funktioniert auch für Eingabedateien mit Bildsequenz. Lesen Sie hier mehr .Windows-Benutzer : In der Befehlszeile verwenden
%
Beispiel:
ffmpeg -i inputFile.mp4 -r 1 outputFile_%02d.png
In CMD- und BAT-Skripten verwenden
%%
Beispiel:
ffmpeg -i inputFile.mp4 -r 1 outputFile %%02d.png
Also doppelt
%%
in Skripten und einfach%
in der interaktiven Befehlszeile. Wenn Sie es in beiden Situationen falsch machen, wird ein Fehler generiert.quelle
-r
wenn ich jeden Frame exportieren möchte ? Wenn ich die FPS des Videos kenne, gebe ich das wohl ein, aber was ist, wenn nicht?jpegs
, es sei denn, Sie sind sich sicher, dass Siepng
es möchten. In meinem Fall warenjpeg
s jeweils etwa 50 KB undpng
s etwa 2 MB.-q:v 1
ist eine sehr nützliche Option hier wie in superuser.com/questions/318845/...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:
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
-endpos
Option. Beispiel für ein 147 Sekunden langes Video:quelle
mpv --vo=image --sstep=5 movie.mkv
funktioniert es ohne den oben erwähnten Fehler ( mpv ist eine Abspaltung von mplayer) mit mpv 0.27.0 unter Debian großartig.Mit
ffmpeg
können Sie Folgendes tun: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
quelle
-ss position
stattdessen das Flag verwenden, um weiter in der Datei zu suchen?-ss Seek to given time position in seconds. hh:mm:ss[.xxx] syntax is also supported
-ss
vor das,-i
so dass die Suche passiert, bevor das Eingangsvideo dekodiert wird. Dies sollte es beschleunigen. sourceWenn Sie nach einer Art Kontaktabzug suchen und mit einem Unix-ähnlichen Betriebssystem arbeiten, können Sie dieses aufwändige Skript verwenden, das bis zum Punkt Videokontaktabzug * NIX , kurz vcs , aufgerufen wird .
Im Hintergrund wird auch
ffmpeg
(standardmäßig) oder verwendetmplayer
, daher können viele Videoformate verarbeitet werden. 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 zB auswählen, wie viele Captures Sie möchten oder alternativ die Zeitunterschiede zwischen ihnen.Für ein Intervall von 10 Minuten sieht der Aufruf folgendermaßen aus:
Überprüfen Sie die vollständige Liste der Befehlszeilenoptionen für einige andere Optimierungen.
Hier ist ein Beispiel eines Kontaktformulars von der Homepage :
quelle
Ab VLC 1.1.0 können Sie den Szenenvideofilter verwenden:
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
quelle
VirtualDub kann dies für Sie tun
File
->Export
->Image sequence
quelle
Sie könnten dies auch versuchen
Quelle von oben
quelle
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. Bild gespeichert.
quelle