ubuntuusers.de

ffprobe, mögliche Parameter für -show_entries sections finden

Status: Gelöst | Ubuntu-Version: Ubuntu MATE 22.04 (Jammy Jellyfish)
Antworten |

Gloster

Anmeldungsdatum:
9. April 2020

Beiträge: 417

Leider ist die ffprobe Doku https://ffmpeg.org/ffprobe.html recht dünn, und gibt nur eine Struktur an und die zugehörige Syntax, s. "-show_entries section_entries"

Nun denn, via

ffprobe -sections

erhält man weitere Informationen :

...
.A.      chapters
...          chapter
..V              tags/chapter_tags
...      format
..V          tags/format_tags
.A.      frames
...          frame
..V              tags/frame_tags
.A.              side_data_list/frame_side_data_list
...                  side_data
.A.                      timecodes
...                          timecode
.A.              logs
...                  log
...          subtitle
.A.      programs
...          program
..V              tags/program_tags
...

Und man findet dann im Internet :

ffprobe ... -show_entries frame=pkt_pts_time ...

Leider habe ich anhand der oben angegebenen Doku diesen Eintrag "pkt_pts_time" nicht gefunden, geschweige denn alle möglichen Einträge.

Auch über die ffmpeg-sourcen etwas zu finden, blieb bis Dato ergebnislos. Das einzige was ich in https://github.com/FFmpeg/FFmpeg/tree/master gefunden habe ist die zugehörige Struktur in ffprobe.c : "static struct section sections[]".

Aber wie kommt man von dort auf "pkt_pts_time", bzw. alle weiteren Einträge ? Oder gibt es einen viel einfacheren Weg ?

Gloster

(Themenstarter)

Anmeldungsdatum:
9. April 2020

Beiträge: 417

Offensichtlich ist eine triviale Lösung möglich. Mit :

ffprobe -show_frames input.mkv
...
[FRAME]
media_type=video
key_frame=0
pkt_pts=3240
pkt_pts_time=3.240000
pkt_dts=N/A
pkt_dts_time=N/A
best_effort_timestamp=3240
best_effort_timestamp_time=3.240000
pkt_duration=40
pkt_duration_time=0.040000
pkt_pos=18009
pkt_size=480
width=320
height=240
pix_fmt=yuv444p
sample_aspect_ratio=1:1
pict_type=P
coded_picture_number=76
display_picture_number=0
interlaced_frame=0
top_field_first=0
repeat_pict=0
[/FRAME]

erhält man die verwendeten Section entries für section , "frame".

Ein Bsp. für pkt_pts_time,pict_type,key_frame :

1
2
#!/bin/sh
for f in *.m2ts;do ffprobe -v error -show_entries frame=pkt_pts_time,pict_type,key_frame -select_streams v:0 -of csv=p=0 "$f" > "$(basename "$f" .m2ts)".txt;done

Die Reihenfolge ist allerdings die von der "Frame"-Ausgabe, also key_frame,pkt_pts_time,pict_type :

0,27133.180389,B
0,27133.220389,P
0,27133.260389,B
0,27133.300389,B
0,27133.340389,B
0,27133.380389,B
1,27133.420389,I
0,27133.460389,B
0,27133.500389,B
0,27133.540389,B
0,27133.580389,P
0,27133.620389,B

Es liegt selbstverständlich nah, das das auch für -show_programs, -show_format usw. funktioniert.

Ein Hinweis zu der Ausgabe von ffprobe zu key_frame, pict_type mit noch einer Ergänzung "-skip_frame nokey" :

1
2
#!/bin/sh
for f in *.m2ts;do ffprobe -v error -skip_frame nokey -show_entries frame=pkt_pts_time,pict_type,key_frame -select_streams v:0 -of csv=p=0 "$f" > "$(basename "$f" .m2ts)".txt;done

zeigt folgendes :

1,27132.140389,I
1,27133.420389,I
1,27134.700389,I
1,27135.980389,I
1,27137.260389,I
1,27138.540389,I
1,27139.820389,I
1,27141.100389,I
1,27142.380389,I
1,27143.660389,I
1,27144.940389,I
1,27146.220389,I
1,27147.500389,I
1,27148.780389,I
1,27150.060389,I
1,27151.340389,I
1,27152.620389,I
...

key_frame = 1 und picture_type = I ist nach Definition ein IDR frame.

Antworten |