Gibt es eine Möglichkeit, die Intra-Frames zu extrahieren und sie so wie sie sind aus FFMPEG oder einem ähnlichen Programm zu erhalten? Ich weiß, dass man Frames mit in eine JPEG-Bildsequenz extrahieren kann -f image2
. Aber das sind vollständige Bilder von jedem der Frames. Ich möchte nur das Bild der Bewegungsänderung exportieren, also würde ich die P- und B-Frames haben, die nur die Bewegungsänderung zeigen und den unveränderten Bereich der Bilder ausschließen oder maskieren.
Ist das möglich?
Der grundlegende Frame-Exportbefehl, den ich verwende. Damit erhalte ich von jedem Frame Vollbilder mit der angegebenen FPS.
ffmpeg -i input.mp4 -r 12 -an -b 1024k -y -f image2 frame%4d.jpg
Ich möchte die Frames so exportieren, dass ich einen Ordner mit Frames habe, in dem der erste Frame ein vollständiges Bild ist und der nächste Frame nur die Bilddaten enthält, bei denen das Bild neu gezeichnet werden muss. Aufdeckung der zeitlichen Redundanz zwischen den beiden Frames (ist das nicht das, was I-, P- und B-Frames tun?)
Antwort1
Um einen bestimmten Rahmentyp zu extrahieren, verwenden Sie dieselect
Filter:
select=eq(pict_type\,<x>)
wobei <x>
einer der folgenden Werte ist:pict_type (video only) the type of the filtered frame, can assume one of the following values: I, P, B, S, SI, SP, BI
Also zum Beispiel:
ffmpeg -i <inputfile> -vf '[in]select=eq(pict_type\,B)[out]' b.frames.mp4
Um mehr über die Ausgabe zu erfahren, fügen Sie dieshowinfo
Filter:
ffmpeg -i <inputfile> -vf '[in]select=eq(pict_type\,B),showinfo[out]' b.frames.mp4
Antwort2
P- und B-Frames enthalten normalerweise nicht für jeden der geänderten Bereiche neue Bilddaten. Das Bild wird vielmehr in Makroblöcke unterschiedlichen Typs aufgeteilt. Einige Arten von Makroblöcken enthalten neue Bilddaten, die meisten berechnen den Inhalt jedoch auf der Grundlage anderer Referenzbilder und Bewegungsvektoren.
Das ist nicht genau das, was Sie wollten, aber hier wird der Typ jedes Makroblocks durch Farben angezeigt:
ffmpeg -debug vis_mb_type -i input.mp4 output.mp4
oder
ffplay -debug vis_mb_type input.mp4
Dadurch werden Ihnen auch die Bewegungsvektoren angezeigt:
ffplay -debug vis_mb_type -vismv 7 input.mp4
Weitere Informationen zu den Farben der einzelnen MB finden Sie unter dem Link:
Debuggen von Makroblöcken und Bewegungsvektoren FFMpeg-Dokumentation