2016-05-31 21 views
1

Ich benötige den Frametyp (I/B/P) einer bestimmten Frame-Nummer für einen x264-codierten Film.Erhalte den Frametyp für einen bestimmten Frame mit ffmpeg

Wie mache ich das mit ffmpeg/ffprobe? Ich bin offen für andere Lösungen.

+0

vielleicht können Sie '-debug vis_mb_type' verwenden. Dies sollte nale Einheitentypen auf stdout drucken. – incBrain

+0

Ich habe versucht, 'ffplay video.mp4 -vf showinfo' auszuführen, dies druckt alle Bildtypen auf dem Bildschirm aus. Vorheriger Befehl funktionierte nur aus irgendeinem Grund für Hevc – incBrain

Antwort

1

Sie können ffmpeg verwenden direkt

ffmpeg -i input.mp4 -vf select='eq(n,334)',showinfo -f null - 

Die oben einen Ausgang für den 335. Rahmen des

n: 0 pts: 171008 pts_time:11.1333 pos: 1090471 fmt:yuv420p sar:1/1 s:1280x720 i:P iskey:0 type:B checksum:A72D197D plane_checksum:[9008E835 680AC49A 6CD66C90] mean:[136 122 134] stdev:[65.4 7.0 9.5] 

Video produzieren Sie können die Auswahlfilter überspringen und Ausgang für alle Frames und dann grep wie @incBrain tut. Beachten Sie, dass Sie die display picture number nicht codiert haben möchten.

+0

Das funktionierte für mich, danke. Am Ende habe ich folgendes verwendet: 'ffmpeg -i input.mkv -vf" auswählen = eq (n \, 100), showinfo -f null - 2> & 1 | grep type: | awk '{split ($ 16, a, " : "); drucken a [2]}" – Damnesia

+0

wow das ist toll, wusste nicht über 'eq (n, 334)' tnx. – incBrain

0

fand ich die Art und Weise, wie man es zu tun mit ffprobe und grep:

$ ffprobe video.mp4 -show_frames | grep -E 'pict_type|coded_picture_number' 

Dies bedeutet eine Ausgabe wie folgt erzeugt:

pict_type=I 
coded_picture_number=0 
pict_type=B 
coded_picture_number=3 
pict_type=B 
coded_picture_number=2 
pict_type=P 
coded_picture_number=1 
pict_type=B 
coded_picture_number=6 
... 

Um den Rahmentyp für bestimmte Rahmen zu erhalten (zB Rahmen 8) Sie können es zu diesem erweitern:

$ ffprobe video.mp4 -show_frames | grep -w -E 'coded_picture_number=8' -B 1 

pict_type=P 
coded_picture_number=8