Media Stream Inspection with ffprobe
ffprobe inspects containers, streams, chapters, and packet timing without converting the media.
ffprobe is FFmpeg's inspection tool. Its value is that the question controls what is reported: whole-source information, individual streams, programmes, chapters, encoded packets, or decoded frames.
With ffprobe installed, start with a structured description:
ffprobe -v error -show_format -show_streams -show_chapters -of json "Movie.mkv"
The format section concerns the source as a whole. Each stream section concerns one component. Chapters describe named positions. The report is written as JSON without creating a converted movie.
| Field | Interpretation |
|---|---|
| format_name | Detected reader/format family; related formats may share a name |
| index, codec_type, codec_name | Which component the following properties describe |
| time_base | Seconds represented by one integer timestamp tick |
| tags and disposition | Descriptive fields and selection roles |
| duration and bit_rate | Values for the section's scope, potentially calculated or estimated |
Move from a summary to a timing question
Suppose video stutters around ten minutes. This command requests a short packet examination near that source position:
ffprobe -v error -select_streams v:0 -read_intervals "600%+5" -show_packets -show_entries packet=pts_time,dts_time,duration_time,flags,pos,size -of json "Movie.mkv"
v:0 selects the first video component, not every stream. The interval requests a seek near 600 seconds followed by about five seconds of reading. Seeking may begin at a nearby usable point, and the relative interval is measured from the actual found position. Treat the returned timestamps as the evidence of the range actually read.
The packet fields connect decode and presentation time with byte position, size, and flags. In reordered video, PTS can move backwards in decode order while DTS advances. That is a meaningful pattern rather than an automatic corruption diagnosis.
A programme question uses another view
For a television transport recording, add -show_programs to the summary request. Programme entries show how streams are grouped. A global stream index and a programme number answer different identity questions; they should not be confused when several services occupy one file.
Packets and frames ask different things of the tool
-show_packets reports encoded packet information obtained by the reader. -show_frames asks for information about decoded frames and can involve decoder work. A successful packet report does not establish that all picture data decodes, while decoding a selected interval still does not test the rest of a long recording.
For Emby investigation, use the exact source and record which tracks the session selected. The useful progression is a summary to identify the source, then a narrower packet or frame question that corresponds to the observed failure. Missing optional JSON fields mean no value was emitted; they should not silently become zero in a comparison or script.
See Also
- Media Probing
- Media Stream Inspection with MediaInfo
- Packet Timestamps
- MPEG-TS Program Tables: PAT and PMT