vidupscaler
Explainer

Codecs for upscaled video

A great upscale can be ruined in the final encode. Here’s how to choose a codec, quality level and bit depth that keep the detail you just created.

Updated 14 Nov 20262 min read
CodecUse it forNotes
H.264 (libx264)Maximum compatibilityPlays everywhere; files are larger at high resolutions; use yuv420p
HEVC / H.265 (libx265)4K and 8K delivery, 10-bitSmaller than H.264 at similar quality; add -tag:v hvc1 for Apple players
AV1 (SVT-AV1)Efficient delivery, webRoyalty-free and efficient; slower to encode; check playback support
ProRes 422 HQ / DNxHR HQEditing mastersLarge files, easy to edit, survive re-encoding

8-bit vs 10-bit

8-bit video has 256 levels per channel, and smooth skies and gradients can show steps (banding). 10-bit has 1024. Even from an 8-bit source, encoding an upscale in 10-bit hides banding introduced by processing. Use -pix_fmt yuv420p10le with HEVC or AV1. Keep H.264 at 8-bit yuv420p for compatibility.

Quality: CRF vs bitrate

CRF (constant rate factor) targets constant quality and lets the file size vary, which is best for masters and archives. Target bitrate fixes the size, which suits upload limits and platforms with recommended rates. Plan either one with the bitrate calculator.

Containers and audio

The FFmpeg generator writes these settings for you.

FAQ

What CRF should I use?

For libx264, 18 is commonly treated as visually near-lossless and 23 is the default. For libx265 the default is 28, and around 20–22 is a good high-quality setting. For SVT-AV1 the scale runs 0–63, and values around 25–35 are typical for high quality. Always check a sample.

Why does my upscaled video have banding in the sky?

Smooth gradients plus 8-bit encoding and a modest bitrate cause banding. Encode in 10-bit (HEVC or AV1 with yuv420p10le) and raise the quality.

Should I keep the upscale as ProRes?

For editing, yes. Intermediate codecs (ProRes 422 HQ, DNxHR HQ) decode easily and survive re-encoding. Make the small delivery MP4 at the very end.