Crisp › Compared › ffmpeg (Lanczos)

ffmpeg Lanczos vs AI upscaling

Crisp · built in Grand Rapids · published 2026-07-23 · last updated 2026-09-16
Quick answer

One command, no install beyond ffmpeg, no cost: ffmpeg -i in.mp4 -vf scale=3840:-2:flags=lanczos -c:a copy out.mp4. It will upscale any video to 4K in about the time it takes to re-encode. For a real share of jobs that is the correct answer and an AI upscaler is overkill. Knowing which jobs is the useful part.

What Lanczos actually does

It is a resampling filter, a windowed sinc function, that computes each new pixel from a weighted neighbourhood of the old ones. It preserves edges better than bilinear or bicubic, which is why it is the standard recommendation for enlargement. It also produces slight ringing next to hard edges, visible as a faint halo, which is the known cost of its sharpness.

What it does not do, at all, is add information. A 480p source resized to 4K contains exactly the detail of the 480p source, distributed over more pixels. It will look bigger and slightly soft. It will not look like it was shot at 4K, because nothing in the arithmetic could make that happen.

When free is the right answer

SituationUseWhy
Clean 1080p → 4K for a delivery specLanczosNothing is damaged; you just need the pixel dimensions.
Matching resolutions in a timelineLanczosFast, predictable, no invented detail to mismatch.
Batch of 500 files, deadline tonightLanczosSeconds per file against minutes per file.
Old 480p footage you want to actually watchAIDetail is missing; interpolation cannot invent it.
Heavily compressed downloadAIBlocking is a learnable artefact; Lanczos enlarges the blocks.
Noisy low-light phone videoAIDenoise plus reconstruction; Lanczos sharpens the noise.

The case against reaching for AI by default

An AI upscaler guesses. On degraded footage that guess is a large improvement. On clean footage it is a risk: models can smooth skin into plastic, turn fine fabric texture into a repeating pattern, and render text as confident nonsense. Lanczos has no opinions and therefore no way to be creatively wrong.

Speed is the other half. Lanczos is close to free computationally. A diffusion-based upscaler is minutes per minute of footage on a good machine. If you are resizing because a client asked for 4K deliverables and the source is already sharp, spending an hour of GPU time to arrive somewhere slightly worse is a bad trade.

What the gap actually measures

Everything above is the argument people make. Here is the measurement, on one clip, so you can see the size of the difference instead of taking our word for it — including the axis where Lanczos wins.

The source is a deliberately degraded clip generated from a fixed recipe: a detailed moving synthetic source, downscaled to 320×180, given mild noise, then encoded at a low H.264 bitrate so compression artefacts are real. No randomness and no wall-clock, so the same input comes back every time. Both sides upscale it to 1280×720 and are scored on decoded frames.

Measured on the same clipLanczosCrispReading
Detail (variance of Laplacian)328.5521.759% more edge detail. Lanczos resamples what is there; it cannot add what is missing.
Banding (share of flat pixels on a hard step)26.97%12.75%Less than half the staircase in gradients.
Residual grain0.540.47Modest. Do not choose a tool on this.
Frame-to-frame flicker1.01.0Identical. Neither was steadier than the other.
Shimmer introduced vs the source−0.5−0.5Identical, and negative both ways: neither added shimmer on this clip.
Colour accuracy vs the source0.3613.017Lanczos is 8.4× truer. The model shifts colour; the arithmetic does not.

The last row is the one worth sitting with. If your reason for upscaling is a delivery spec and the grade is already signed off, an AI pass will move your colour and Lanczos will not. That is a real argument for the free option and we would rather you knew it than found it in a review.

The flicker rows matter for the opposite reason: they say nothing. It is common to read that AI upscalers introduce shimmer, and on this clip neither tool did. That is one clip and one preset, not a law — which is the honest size of the claim.

If you run this yourself, match the bitrate

A warning that cost us a wrong answer before we caught it. Our first run encoded the Lanczos output at high quality and left Crisp’s own encoder settings alone, so one side came out at 4.6 Mbps and the other at 1.0. On that pair Crisp looked clearly steadier on both flicker rows. Matched to the same bitrate, the two are exactly tied, and the entire apparent advantage turned out to be the encoder rather than the upscaler.

So if you compare two upscalers on your own footage, give both outputs the same bitrate before you judge anything, or you will be measuring your encoder and attributing it to the model. The numbers above are all at a matched 1.0 Mbps.

Scope, plainly: one synthetic degraded clip, one preset, one 4× scale, on an M1 Ultra. These are valid as a comparison between two tools on the same source, not as universal constants — your footage will produce different absolute numbers.

What an app adds over the command

Mostly: knowing which of these to do, and not having to remember -2 means "keep the aspect ratio and round to an even number so the encoder accepts it". Crisp picks the appropriate path for the footage, keeps audio in sync across frame-rate oddities, and puts the whole thing behind a timeline so you can cut first and upscale the finished sequence once.

But if the command above does what you needed, use it. It is free and it is not a compromise.

The test that settles it for your footage

Take thirty seconds of your worst clip and run it both ways, then watch them back at full screen rather than in a preview window. If the Lanczos version looks acceptable, you are done and you have spent nothing. If it looks like a bigger version of the same bad video — which is exactly what it is — then the source is genuinely degraded and reconstruction is the only thing that will help.

Zoom in on a flat area while it plays, too. Lanczos will not introduce shimmer of its own, because it makes the same decision on every frame. What it cannot do is remove shimmer that is already there: aliasing in the source passes straight through and comes out enlarged along with everything else, so fine detail that was already crawling still crawls afterwards. An AI upscaler can add shimmer that was never in the source at all, and comparing the two side by side is the fastest way to find out whether a given tool has that problem on your kind of footage.

One thing to get right either way

Do not upscale twice. Going 480p to 1080p and later 1080p to 4K compounds whatever each pass got wrong, and with an AI model it compounds the invented detail as well — the second pass treats the first pass's guesses as real source material. Decide the final resolution and get there in one operation.

Related