Encoder mechanics
Grain, halation and film emulation are high-frequency, low-correlation detail. That is the exact signature a rate-limited encoder reads as noise, and noise is what it defunds first. Here is the mechanism, what Vimeo's own published delivery ceilings imply for grainy footage, what to change at export, and the one structural fix.
No credit card required. Cancel any time.
Updated September 2026
The mechanism
A modern video encoder is a prediction machine with a budget. It predicts each frame from the ones around it, encodes only the difference, and spends its remaining bits where it believes they will be missed. Grain defeats the prediction and then loses the argument about the remaining bits. Both halves of that sentence are mechanical, and neither is a bug.
Inter-frame coding works by finding a block in a previous frame that looks like the block being coded, then storing the small difference between them. A grain field is close to random from one frame to the next, so no candidate block matches, the residual stays large, and the encoder is asked to spend real bits on a pattern that will be different again in a fortieth of a second.
The residual is transformed into frequency coefficients. Smooth shapes land in the low-frequency corner; grain, halation edges and fine texture land in the high-frequency coefficients. Quantisation divides every coefficient by a step size and rounds. The small high-frequency values round to zero before anything else does, so the first thing an encoder discards, at any bitrate, is precisely the band your grain lives in.
The encoder is targeting a bitrate, so each frame gets a share of bits and a quantiser step chosen to hit it. A grainy frame is expensive, which drives the step coarser, which zeroes more coefficients, which removes more grain. The feedback loop runs in the direction you do not want: the grainier the shot, the harder that shot is quantised.
Encoders carry perceptual models that decide which detail a viewer will miss. Fine random texture with no shape is classed as maskable, on the reasonable assumption that it is sensor noise. Your grain and halation are indistinguishable from sensor noise at the coefficient level. The model is doing its job and getting your intent exactly backwards.
Why it looks worse, not simply softer
If quantisation removed grain evenly you would get a clean, slightly plastic image and most people would shrug. That is not what happens, and the reason the complaint is always “smeary” rather than “soft” is worth understanding.
The tell that says re-encode rather than bad export
What the published ceilings imply
This part does not need a measurement, because the numbers are Vimeo’s own. Vimeo states that during transcoding your file is re-encoded into several formats, and it publishes the maximum video bitrate of each rendition it delivers. Those are ceilings, and Vimeo says so in the same table.
22 Mbps
4K ceiling, H.264 ladder
Vimeo's published maximum for its 4K rendition
16 Mbps
4K ceiling, HDR ladder
The HDR and above-4K HEVC renditions are published separately and lower
Lower
On complex images
Vimeo's own qualifier: a video can transcode below the listed maximum depending on the complexity of the image
0
Re-encodes here
The player streams the exact bytes you uploaded
Vimeo H.264 ladder, 1080p60
Vimeo H.264 ladder, 2K
Vimeo HDR ladder, 4K
Vimeo H.264 ladder, 4K
Vimeo recommended 4K upload
A 4K graded export, streamed here
Vimeo's maximum delivery bitrates per rendition and its recommended upload bitrates, both from its help centre, fetched 4 September 2026. Vimeo states that the bitrates listed for each resolution are a maximum and that a video could transcode at a lower bitrate depending on the complexity of the image. The uncompressed.io bar is not a ceiling: it is whatever bitrate your export happens to be, shown here at a 150 Mbps 4K grading export.
The professional answer, and why it is closed to you
Broadcast and streaming engineering solved this years ago, and the solution is the opposite of what most filmmakers try. You do not fight the encoder for grain bits. You take the grain out before the encode and put it back after.
Strip the grain, and with it the expensive high-frequency residual. The clean image is smooth, highly predictable and cheap to code, so the same bitrate now buys detail in the parts of the frame that carry shape.
The quantiser is no longer being driven coarse by a grain field it cannot predict. Edges hold, gradients hold, and the bits go where a viewer will actually miss them.
Grain is statistics, not content: a size, a strength, a chroma weighting, a per-channel variance. That is a few bytes per frame rather than a few megabits.
The decoder synthesises grain from those parameters at playback. AV1 ships exactly this as a film grain synthesis tool. The viewer sees an even, correctly-sized grain field that was never quantised, because it was never transmitted as picture.
The honest limit of every export-side tip
What to change at export
These are worth doing even if you never move hosts. They make the file you hand a client better, they make the first encode less destructive, and two of them change how the grain behaves under any later quantisation.
Constant rate factor targets a quality level rather than a bitrate, so a grainy shot is allowed to get the bits it needs instead of being squeezed to hit a number. Vimeo itself recommends CRF 18 or below in its compression guidelines. Below 18 costs file size and buys grain; above 18 the quantiser starts clearing the high-frequency band on every complex shot.
Ten bits give 1,024 code values per channel instead of 256. The quantiser has finer steps to land on, flat areas hold their shallow gradients, and the internal precision means less error accumulates through the transform. At an identical bitrate a 10-bit encode of a grainy shot holds together visibly better than an 8-bit one, and it is the difference between grain thinning and grain being replaced by bands.
Add grain, halation and emulation before the final render, so exactly one encode sees them. Adding grain to an already-compressed file means encoding twice: the second pass now has to spend bits on your grain and on the artefacts underneath it, and it will fund neither properly.
Fine grain lives in the highest-frequency coefficients, the first to be zeroed. A larger particle puts energy into mid-frequency coefficients that survive a coarser quantiser, so it thins gracefully rather than disappearing and being replaced by block-level blotching. If a delivery is going somewhere that re-encodes, size up half a step.
Chroma is subsampled to 4:2:0 on almost every delivery path, so chroma grain is being averaged into a quarter of the samples before the quantiser even starts. Luma-weighted grain reads the same to a viewer and costs the encoder far less.
Not your local render, and not the platform's preview player at whatever quality it defaults to. Force the exact rendition that will be delivered, play it full screen, and look at a flat area. This is the only step that tells you the truth, and it is the one almost nobody does.
The structural answer
Everything above is mitigation, because it assumes a second encode. Remove the second encode and the problem does not get better, it stops existing. A host that stores and streams the exact bytes you uploaded never makes a quantisation decision about your grain, because it never runs a quantiser.

Vimeo figures and policies from its help centre, fetched 4 September 2026: every upload is re-encoded into several formats; the published maximum delivery bitrates are up to 22 Mbps at 4K on the H.264 ladder and up to 16 Mbps at 4K on the HDR ladder; Vimeo states those are maximums and that output can be lower depending on the complexity of the image; above 4K is delivered in HEVC. uncompressed.io accepts MP4 or MOV in H.264, HEVC or AV1 up to 50 GB per file; ProRes and DNxHR are hosted for client download rather than streamed.
When you should not move
There is a version of this page that ends by telling you to leave every platform that re-encodes. That version would be wrong, and here is the honest boundary.
Questions
It does not ruin it evenly, which is the problem. Grain is near-random, so motion compensation cannot predict it from the previous frame and the residual stays large. It is also high-frequency, so the transform concentrates it in the coefficients the quantiser rounds to zero first. At a low enough bitrate the fine structure is gone and what replaces it is a coarser, moving blotch pattern. That reads as smeary or plasticky rather than clean, because your eye is comparing it to the grain it saw a second earlier.
Rate control has a bit budget per frame and has to decide where the bits go. Psychovisual models treat fine random texture as maskable: the assumption is that a viewer will not miss detail that carries no shape. That assumption is right for sensor noise in a corporate interview and wrong for a grain structure you added on purpose, and the encoder cannot tell the two apart.
It fixes the first encode, which is worth doing. It does not fix a platform that re-encodes what you send. Vimeo states that every upload is re-encoded into several formats, and publishes maximum delivery bitrates of up to 22 Mbps at 4K on the H.264 ladder and up to 16 Mbps on the HDR ladder. Whatever you upload above that is spent on giving the second encoder a cleaner input, not on what the viewer receives.
Yes, at the same bitrate. Ten bits give the encoder 1,024 code values per channel instead of 256, so the quantiser has finer steps to land on in flat areas and in the shallow parts of a grain field. The practical effect is less banding where the grain has been stripped, and a slightly cheaper residual because the internal precision is higher. It is not a substitute for bitrate; it makes the bitrate you have go further.
Because it requires control of the last encode. Broadcast and streaming pipelines denoise the master, encode the clean image cheaply, then rebuild the grain at the far end, which is also what AV1's film grain synthesis tool does in the decoder. If a platform re-encodes after you deliver, that last encode is theirs, not yours, and any grain still in your file arrives at their encoder as expensive noise.
A slightly coarser grain survives better at any given bitrate. Fine grain lives in the highest-frequency coefficients, which are the first zeroed. A larger grain particle has energy in lower-frequency coefficients that the quantiser keeps for longer, so it degrades gracefully instead of vanishing and being replaced by blotching. Test it rather than trusting the intent: render two grades and watch the rendition the client will actually be sent.
There is no second encode. The player streams the exact bytes you uploaded, so the grain that leaves your grading suite is the grain that reaches the viewer. The honest caveats: playback depends on the viewer's hardware decoder, browser-decodable codecs stream (H.264, HEVC and AV1) while ProRes and DNxHR are hosted for download rather than streamed, and there is no adaptive ladder, so a slow connection buffers instead of quietly switching to a mushier rendition.
The player here streams the exact bytes you upload. No transcode, no adaptive ladder, no second encode to re-quantise the grain you spent an afternoon dialling in.