In the source image, yes. But what about the Y values in the video file? What analysis tool and methodology confirms 0, 16, 235, 255 are the Y values in the video file?
I’ve tried to replicate your findings. Since I don’t have your source image, I’m having to use my 0-16-235-255.png image. It should produce the same results.
Next, I run the command you posted for the limited range file:
ffmpeg -y -loop 1 -t 10 -i 0-16-235-255.png -pix_fmt yuv420p -c:v libx264 -vf scale=out_range=limited -color_primaries bt709 -color_trc bt709 -colorspace bt709 -r 59.94 -an Window_limited.mp4
Then I generate a digital waveform of that video:
ffmpeg -i Window_limited.mp4 -frames:v 1 -vf waveform=scale=digital:flags=numbers+dots:display=overlay:g=green:o=0.25 Window_limited_scope.png
Here is the waveform:
The stair steps are clearly at 16, 29, 217, 234. Those are the Y values.
Since the right-most swatch is only Y 234 according to the waveform, the above claim cannot be substantiated. The file doesn’t have a Y 255 value in it to check that IRE value. The highest value that’s been checked so far is Y 234.
The reason the highest value is Y 234 is because out_range=limited
compressed the source image to 16-235, and now we have limited range data in a file flagged as limited range. In this state, we have a normal totally-regular limited range file where Y 235 is 100 IRE. Shotcut is correctly reporting IRE of the highest Y value in there, which is 234.
This file says nothing about the IRE of Y 255 without extrapolation. It doesn’t have a Y 255 in it. The waveform confirms it.
The correct value for this specific test case should be Y 255. I’m guessing you think it should be Y 235. But you haven’t said, so communication is unclear.
As described long ago, the Shotcut waveform is properly calculating IRE in all cases, and the video zoom is properly reporting Y values for all limited-range videos. None of your tests prove otherwise because you haven’t scoped a true Y 255 value yet.
It is impossible for the eyedropper to arrive at the correct value. Consider that Y 255 is a superwhite illegal value in a file flagged as limited range. Y 235 is supposed to be as white as it gets. An eyedropper cannot report a superwhite due to clipping during conversion. If the eyedropper agrees with an intentionally malformed, out of bounds, and illegally-valued limited range file, then that’s a clear sign the video file doesn’t actually have the right values in it.
I haven’t tried the ffplay scope or reviewed its source code. I only checked the waveform filter in ffmpeg. The proper description of ffmpeg’s problem is “IRE values are calculated using Y 235 on full-range video instead of Y 255”.