A per-frame plot is the picture that answers when: frame index or time runs along the x-axis, the quality score up the y-axis, so you see the shape of quality across the clip - the dips, the recovery, the one bad shot. It matters more than the average it summarizes, because two encodes can share an identical mean VMAF while one holds steady and the other collapses for a short, hard-to-encode shot; the mean is blind to that dip but the plot shows it, and that collapse is what a viewer remembers. The data falls straight out of libvmaf, which writes a per-frame log when you set its log path and format. Two summaries make the plot quantitative without losing the worst frames: the harmonic mean, which weighs low scores more heavily, and the 5th percentile, the score of the worst five percent of frames. The catch is the truncated y-axis: plotting VMAF from 90 to 100 instead of 0 to 100 turns a one-point difference into a cliff.

