Ich versuche, Keyframes aus einem Videoclip zu extrahieren. Ich habe den folgenden Befehl ausprobiert, aber er extrahiert alle Frames.
ffmpeg -vf select="eq(pict_type\,PICT_TYPE_I)" -i 2.flv -vsync 2 -s 73x41 -r 30 -f image2 thumbnails-%%02d.jpeg
Ich versuche, Keyframes aus einem Videoclip zu extrahieren. Ich habe den folgenden Befehl ausprobiert, aber er extrahiert alle Frames.
ffmpeg -vf select="eq(pict_type\,PICT_TYPE_I)" -i 2.flv -vsync 2 -s 73x41 -r 30 -f image2 thumbnails-%%02d.jpeg
Antworten:
Sie können die Verwendung -skip_frame
ohne select
Videofilter vereinfachen :
ffmpeg -skip_frame nokey -i 2.flv -vsync 0 -r 30 -f image2 thumbnails-%02d.jpeg
-threads 1
Vergleich zum Standard 2x so schnell ist (60s bis 30s)! -threads auto
cropdetect
ffmpeg -threads 1 -skip_frame nokey -i input.mkv -filter:v select='not(mod(n\,20))',cropdetect -an -f null /dev/null
-threads 1
besteht darin, dass die Reihenfolge der Ausgabe-Keyframes ansonsten nicht in der richtigen Reihenfolge ausgegeben werden kann. Wenn Sie eine Post-hoc- Methode zur Lösung dieses Problems haben, können Sie das Multithreading beibehalten. Es scheint auch, dass es immer noch möglich ist, Keyframes außerhalb der Reihenfolge zu erhalten, selbst wenn sie verwendet -threads 1
werden. In diesem Fall scheinen alle derartigen Vorkommnisse von einem h264-Decoderfehler begleitet / gekennzeichnet zu sein illegal short term buffer state detected
.
Beispiel mit den Filtern select
und scale
:
ffmpeg -i 2.flv -vf "select=eq(pict_type\,I),scale=73x41" \
-vsync vfr -qscale:v 2 thumbnails-%02d.jpeg
Einige Tipps:
Filter sollten nicht vor der -i
Option stehen, da sie eine Ausgabeoption sind. Ich weiß nicht genau, woher Sie den Befehl haben, aber er PICT_TYPE_I
existiert nicht - er sollte es sein I
.
Im scale
Filter können Sie ersetzen 73
oder 41
den Filter automatisch die Breite oder Höhe berechnen lassen, um das Seitenverhältnis beizubehalten: wie scale=73:-1
oder scale=-1:41
. Dies verhindert ein Dehnen oder Quetschen, das aus einer "erzwungenen" Skalierung resultieren kann.
Die Ausgabequalität kann mit -qscale:v
(oder dem Alias -q:v
) gesteuert werden . Der effektive Bereich ist eine lineare Skala von 2 bis 31 und ein niedrigerer Wert ist eine höhere Qualität.
Dass Sie ffmpeg
einen Filter zulassen, bevor die Eingabe mir sagt, dass er veraltet sein könnte. Laden Sie einen aktuellen statischen Build für Ihr Betriebssystem herunter oder erstellen Sie ihn selbst gemäß den Kompilierungshandbüchern, wenn dies nicht funktioniert.
ffmpeg -i 2.flv -vf "select=eq(pict_type\,I)" -vsync vfr frame-%02d.png
wenn dieser Fehler:
Die Option vf (Videofilter festlegen) kann nicht auf die Eingabe-URL 1508.mp4 angewendet werden. Sie versuchen, eine Eingabeoption auf eine Ausgabedatei anzuwenden oder umgekehrt. Verschieben Sie diese Option vor die Datei, zu der sie gehört. Fehler beim Parsen der Optionen für die Eingabedatei 1508.mp4. Fehler beim Öffnen der Eingabedateien: Ungültiges Argument
du kannst das:
ffmpeg -i 263.mp4 -vf select=eq(pict_type\,PICT_TYPE_I) -vsync 2 -s 480x320 -r 24 -f image2 thumbnails-%05d.jpeg
== ----------------------------------------
"-I" Parameter im Voraus