
Tom Scott
3 HN recommenders · recommended in 9 months, 2018–2024
4:20 · 10M views · May 23, 2016
Tom Scott explains why confetti and snow wreck video quality, using interframe compression and bitrate. He demonstrates it live by changing the quality on screen.
Used as the clearest short demonstration of why noisy, high-motion content is hard for video compression.
10 comments from Hacker News
To this day when I have buffering problems with online videos I immediately think about his explainer-demo with confetti [1]. Love his work! [1] this video
It may be easier to think about high-quality swathes of pixels, because obviously any one pixel can't be wrong in isolation, and even to the extent it is, who cares. However, if you look at a swathe of pixels, say a 16x16 chunk, you can reasonably talk about with what fidelity that set of pixels represents the original signal, whatever that original signal was. You get into the whole perceptual coding thing which tells us that determining the human-perceived accuracy of a chunk of pixels is more than just adding up the differences, but you can take that as a suitable first approximation for thought. High-quality pixels have minimal deviation from the source material. Low-quality pixels have significant deviation. Tom Scott has a good video where turns up and down the quality live so you can see it in a single video: this video The video's resolution never changes, and you could say the video's bit rate never changes (it probably does because adaptive coding saves YouTube a fortune, but conceptually you could say it doesn't), but the quality of the pixels sure does.
I do not know the answer, but I would absolutely shocked if it was streamed as a regular video. To the best of my knowledge, there are many, many optimizations which go into video. This is a pretty good high-level video I came across - this video
You can make educated guesses about the future, which is how Oculus's Asynchronous Spacewarp works. Rendering a whole frame is slow, but warping a pre-rendered frame is fast. If the next frame is taking too long to render, you can warp the last frame to roughly match the perspective that corresponds with the current head tracking data. You get some artefacts, but they're not as noticeable as the judder caused by a missed frame. Prediction can also be used to estimate the head-tracking data at the time the frame is drawn to the display, rather than at the time the frame starts to render. Similar techniques are used in video compression - encoding the exact value of every pixel is expensive, but you can trade bandwidth for processing by encoding transformations of a previous frame. A modern compressed video consists mainly of these interpolated frames, with only a minority of frames containing a full image. This interpolation can use data from both past and future frames (B frames) but can also use just the data in previous frames (P frames). This works extremely well most of the time, but there are some edge cases: this video [LINK]
Yeah. And that's why TV stores really like slow-motion shots or static landscapes to show off the TV. Any motion will cause "HDTV blur" as the encoder struggles to describe complex motion with the limited number of bits it's allowed to use. Stuff like static, film grain, particles like snow or rain, those all suck up bits from the same encoding budget. "Why Snow and Confetti Ruin YouTube Video Quality" by Tom Scott probably explains it nicer than I can this video This could be a problem for video game streaming, and it could affect the artistic decisions a game studio makes - Drawing a billion tiny particles on a local GPU will look crisp and cool, but asking a hardware encoder to encode those for consumer Internet (or phone Internet) might be too much. I think streamers have run into this problem already.