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
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 seinillegal short term buffer state detected
.Beispiel mit den Filtern
select
undscale
: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 erPICT_TYPE_I
existiert nicht - er sollte es seinI
.Im
scale
Filter können Sie ersetzen73
oder41
den Filter automatisch die Breite oder Höhe berechnen lassen, um das Seitenverhältnis beizubehalten: wiescale=73:-1
oderscale=-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.quelle
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:
== ----------------------------------------
"-I" Parameter im Voraus
quelle