Skip to content

hdrprobe v1.0.0

Choose a tag to compare

@github-actions github-actions released this 28 Jul 16:39
· 5 commits to main since this release
v1.0.0
2869d76

New

  • The legacy library, covered. hdrprobe now reads the formats a long-lived media collection actually accumulates: AVI (with exact bitrates from the file's own index), ASF/Windows Media (WMV and VC-1), Flash Video (legacy and Enhanced/E-RTMP alike, including HDR metadata carried in Enhanced tags), Ogg (Theora and VP8), MPEG program streams (.mpg/.vob, DVD rips included, plus HD DVD .evo), raw MPEG-1/2 video streams, MPEG-4 Part 2 (Xvid/DivX), Motion JPEG, raw DV tape streams (.dv), and RealMedia (.rm/.rmvb). Every format reports the general facts (codec, resolution, frame rate, duration, bitrate, and colour where the file signals it) with the same discipline as the HDR formats: signalled-only, nothing guessed. Directory scans and the Windows context menu pick the new extensions up automatically (re-run --install-shell to register them).
  • DVD-Video ISOs. .iso probing now covers DVD-Video discs alongside Blu-ray: hdrprobe locates the main feature inside VIDEO_TS, probes it through the ordinary pipeline, and reports the runtime the disc itself declares. CSS-scrambled rips are detected and refused honestly rather than misread; decrypted backups probe normally.
  • Aspect ratio and scan type. Every format now reports the signalled aspect ratio and scan type. The text report stays quiet unless it would otherwise mislead: DAR appears only for non-square pixels and an interlaced marker only when the stream declares it. JSON always carries both ratios when one was signalled.
  • Machine-readable errors. A new --errors flag adds structured per-file error objects to JSON output, so scripted consumers can tell a refused file from a missing one without parsing stderr.
  • Dolby Vision compatibility resolved from Dolby's own tables. Profile labels no longer carry the "(fallback)" suffix: the base-layer compatibility id now resolves through explicit rungs (declared by the container, fixed by the spec's profile table, inferred from the signalled colour, or assumed by ecosystem convention), and the JSON discloses which rung answered. A raw Profile 5 stream now reads 5.0 and a raw HDR10-base stream 10.1 in JSON as well as text, spec-defined base-layer colour fills absent fields with per-field provenance, and withdrawn profile/CCID pairings are flagged as deprecated.
  • Encrypted and unusual Dolby Vision carriages. Common-encryption MP4 tracks (encv, CENC and CBCS) now report their real codec and full Dolby Vision metadata, since Dolby's streaming specs keep the RPU unencrypted. avc2/avc4 sample entries are recognized, an MP4 enhancement layer folds into its base track by the tref/vdep reference the spec requires, and a transport stream PID's DV descriptor is now authoritative about the base/enhancement shape.
  • Every colour code named. The report names every CICP code point ITU-T H.273 defines, so a legal but uncommon colour signal renders as its name instead of being dropped.
  • Updated Dolby Vision parser. The dolby_vision library moves to 3.4.0, which accepts L11 content-type metadata written by some devices that previously failed validation.

Fixed

  • A misnamed MPEG file can no longer fabricate HEVC metadata. A DVD program stream renamed .hevc could previously print a fully populated (and entirely invented) profile, resolution, and colour description, because among tens of thousands of MPEG slice start codes some byte run eventually decodes as a plausible SPS. Start codes now route structurally, and the Annex-B backends refuse heads that classify as MPEG.
  • Transport stream durations now come from the video's own timestamps. The PCR times byte arrival and real muxers flush the tail without one, so a stream could read short and its bitrate correspondingly high (a corpus stream read 1.92 s for a true 2.000, overstating bitrate 4.2%). The video PTS span now wins, with the PCR span as the fallback.
  • Derived Dolby Vision levels no longer over-promote ultrawide streams. The level table's width limits now come from the spec's own maximum-width column rather than each level's anchor format, which previously pushed ultrawide-but-low-rate content up two levels.
  • hdrprobe ... | head exits cleanly. A consumer closing the pipe early is a success signal; previously it produced a Rust panic backtrace and exit code 101.
  • A malformed command line exits 1. The usage code the exit-code contract documents; previously it exited 2, which scripted callers read as "an input file was unreadable".
  • Single-PID Profile 5 transport streams are read correctly beside a second video PID. A PID whose DV descriptor declares a present base layer was still being treated as an enhancement layer by its private stream type, merging two independent tracks into one; the descriptor now decides.
  • Unrecognized codec labels are terminal-safe. A control character in a file's raw FourCC can no longer reach the terminal.

Schema

  • 2.4 to 3.0 (breaking). Schema 3.0 aligns names and shapes across the report and discloses provenance throughout: bitrates carry their scope and source, stated rates also appear as exact ratios, tracks carry their own durations, the container's own codec identifier is reported, scan coverage is disclosed, hdr.base names the classified base signal, colour carries per-field provenance including spec-defined fills, the Dolby Vision compatibility rung lands in compat_source, quantized frame periods decode to their exact rates, FourCC padding is trimmed, and input_truncated extends to file probes. A step-by-step consumer migration guide, docs/MIGRATION-3.0.md, ships in every release archive; docs/SCHEMA.md documents the complete contract field by field.