2017-08-14 6 views

Antwort

0

Wenn Sie

ffmpeg -i movie.avi -vsync 0 %05d.png 

verwenden keine Frames dupliziert oder gelöscht werden, so dass jedes Bild Serien-Nr. sollte seinem Index im Video entsprechen.

+0

Ja, aber ich mag die Rahmennummern dieser Frames, die extrahiert werden, wenn ich die „-r angeben 25 " Möglichkeit. – BlenderBender

0

Ich fand einige Weise zu tun, was ich will, die nicht eine einfache ist. Mit den „show“ Filter ist es möglich, die Position eines Rahmens in Bezug auf die Quelldatei zu erhalten, dh

ffmpeg -i movie.avi -filter:v 'showinfo' output.avi 

zum Beispiel würde laufen

[Parsed_showinfo_1 @ 0x7ffaebd01bc0] n: 0 Punkte: 0 Punkte_Zeit: 0 Pos: 630548 Schriftart: yuv420p sar: 1/1 s: 1280x720 i: P iskey: 0 Typ: P Prüfsumme: B4E5E664 plane_checksum: [6B3569DD 72B2AE10 31F8CE68] Mittelwert: [76 111 155] stdev: [ 13.1 3.8 8.7]

Dabei steht "pos: 630548" für die Position des ersten Frames in der Quelldatei. Aufgrund der Informationen, die Position in der Quelldatei zu welchem ​​Rahmen entspricht, könnte man dann tun

ffmpeg -i movie.avi -filter:v "fps=fps=25, showinfo" %05d.png > output.txt 2>&1 

, die die Bilder wie zuvor extrahiert, sondern gibt auch die Position der extrahierten Bilder in der Eingabedatei, und aus diesen beiden Informationen kann man die Zuordnung von extrahierten Frames zu Frames in der Eingabedatei zusammenfügen.

Allerdings glaube ich nicht, dass diese Lösung "einfach" (oder hübsch) genannt werden kann.

bearbeiten: Nach dem Vorschlag von @Mulvya, können Sie sich den zusätzlichen Schritt speichern ffmpeg -i movie.avi -filter:v 'showinfo' output.avi laufen die Position der Rahmen in dem Original-Video zu extrahieren, wenn Sie stattdessen

ffmpeg -i movie.avi -filter:v "showinfo, fps=fps=25, showinfo" %05d.png > output.txt 2>&1 

Dies wird ausgeführt die showinfo des ursprünglichen und des gefilterten Videostreams gleichzeitig ausgeben, z (Original-Video-Stream Linien entspricht Parsed_showinfo_0 Ausgang entspricht der gefilterten Strom auf Linien mit Parsed_showinfo_2 beginnend)

[Parsed_showinfo_0 @ 00a38820] n: 0 pts:  0 pts_time:0  pos:  508 fmt:pal8 sar:0/1 s:320x200 i:P iskey:1 type:I checksum:CF3AE73F plane_checksum:[CF3AE73F] mean:[117] stdev:[48.3] 
[Parsed_showinfo_0 @ 00a38820] n: 1 pts:  1 pts_time:0.0285362 pos: 26710 fmt:pal8 sar:0/1 s:320x200 i:P iskey:0 type:P checksum:CF3AE73F plane_checksum:[CF3AE73F] mean:[117] stdev:[48.3] 
[Parsed_showinfo_2 @ 00a38ca0] n: 0 pts:  0 pts_time:0  pos:  508 fmt:pal8 sar:0/1 s:320x200 i:P iskey:1 type:I checksum:CF3AE73F plane_checksum:[CF3AE73F] mean:[117] stdev:[48.3] 
[Parsed_showinfo_0 @ 00a38820] n: 2 pts:  2 pts_time:0.0570725 pos: 31680 fmt:pal8 sar:0/1 s:320x200 i:P iskey:0 type:P checksum:512EEB5E plane_checksum:[512EEB5E] mean:[117] stdev:[48.2] 
+1

Sie können auch eine Showinfo vor dem fps-Filter einfügen. Wenn fps einige Frames löscht, werden ihre Informationen nach fps nicht angezeigt. Und dann müsste nach Paketgrößen suchen, um zu sehen, ob es Lücken in der Positionsreihe gibt. – Mulvya

+0

Wenn Sie zwei Extraktionen durchführen - Ihre und meine -, können Sie die Reihe der Dateigrößen in der Reihenfolge vergleichen, um Tropfen und Duplikate zu identifizieren. – Mulvya

+0

Der Zweck von fps * ist * Frames zu löschen, um die angegebene Framerate zu erreichen. Ich verstehe nicht, was du sagst. – BlenderBender

Verwandte Themen