Ich verwende ffmpeg zum Extrahieren von Keyframes aus einem Video. Dies ist der Befehl:
ffmpeg -i test2.mp4 -vf select='eq(pict_type\,I)' -vsync 2 -s 160x90 -f image2 thumbnails-%02d.jpeg
Wie kann ich den Index jedes Keyframes im Video extrahieren lassen? Für den ersten I-Frame wäre der Index beispielsweise 0, für den zweiten 24 usw.
Antworten:
Wie @dstob bereits erwähnt, können Sie
ffprobe
die I-Frames und die zugehörigen Informationen abrufen .ffprobe
enthält einige der statischen Builds auf der Download-Seite und kann auch aus dem Quellcode erstellt werden.Dies setzt voraus, dass Sie unter Linux / Unix arbeiten:
Frames und Frame-Typen extrahieren
Der
grep
Befehl filtert die darin enthaltenen ZeilenI
und zählt deren Index (mithilfe der-n
Option). Dercut
Befehl wählt nur die erste Spalte der Ausgabe aus (den Index). Beachten Sie, dass dieser Index auf 1 und nicht auf 0 basiert.Benennen Sie Ausgabedateien basierend auf dem Index um
Sie können diese Indizes tatsächlich an eine Liste weiterleiten:
Machen Sie dann auch eine Liste aller Thumbnails:
Dann fügen Sie diese beiden zusammen:
Die Liste enthält nun den Namen des Thumbnails und den Index. Führen Sie eine Umbenennung basierend darauf durch:
Die oben genannten werden umbenannt
thumbnail-01.jpeg
inthumbnail-0.jpeg
. Beachten Sie, dass der Ausgabeindex nicht mit Nullen aufgefüllt wird. Wenn Sie es auf 5 Ziffern auffüllen möchten, verwenden Sieprintf
:Unter Windows würden Sie genau dasselbe tun,
ffprobe
aber die Ausgabe anders analysieren. Keine Ahnung, wie man die Umbenennung dort vornimmt.quelle
[FRAME]
Linie und eine Linie gibt.[/FRAME]
pict_type
-of csv
Option für verwendenffprobe
. Sie beschreiben jedoch das Standardausgabeformat.Wenn Sie FFMPEG wie ursprünglich angegeben verwenden möchten, können Sie eine vollständige oder teilweise Auflistung sowie eine JPG-Datei mit den folgenden Angaben erstellen:
Unbefristet entfernen
-t 15
oder Anzug wechseln.-s 160x90 -f image2 thumbnail-%02d.jpeg
Zum Entfernen von Thumbnails entfernen oder ändern.quelle