viser v0.5.1
Correctness fixes backported onto the 0.5 line. (The NVENC capped-CRF fix and the
per-shot vmaf_model/allow_hdr option from 0.7.1 are not included — the former
targets code introduced after 0.5, the latter is an enhancement rather than a fix.)
Fixed
- Shot detection —
scdetparsing now keys off thelavfi.scd.timecut flag
instead of treating every per-frame score as a boundary. Previously every frame
was marked a boundary and the minimum-duration merge collapsed them back into a
single shot, so a 60s clip with 10 cuts reported just 1.detect()now also fails
loudly on ffmpeg errors and skips boundaries at/after the total duration. - Convex hull — non-finite (NaN/inf) bitrate/VMAF points are filtered before hull
construction, avoiding a panic. extract()— validates that start is non-negative and duration is positive and
finite; concat list paths now escape backslashes as well as single quotes.- Probe (MediaInfo path) — the 8-bit chroma fallback emits a valid
yuv420p
pixel format instead of the invalidyuv420p8le. - Quality measurement — frame-extraction and XPSNR failures include ffmpeg stderr,
and a frame-count mismatch is warned. Weighted PSNR(6·Y + U + V) / 8is only used
when both chroma planes are present, otherwise it falls back to luma. - Per-segment — guards against zero total duration so average bitrate/VMAF are
0.0rather thanNaN. - CLI loudness report — includes true-peak (
Peak:) and gating threshold lines;
the over-broadstarts_with("L")filter that dropped them while printing header
noise is fixed. - Comparison player — frame timestamps derive from the source's real frame rate
(probed) instead of a hardcoded 24 fps, fixing dip seek positions on 25/30/50/60 fps
content.
Added
per-segment analyze --segment-duration— segment length is configurable
(default 1s) instead of hardcoded.