Back to Blog
Color Spaces & Dynamic Range in Digital Video: Rec.709 vs DCI-P3 vs Rec.2020
Dilip NayakMay 12, 202616 min readMedia Optimization

Public media guide

Color Spaces & Dynamic Range in Digital Video: Rec.709 vs DCI-P3 vs Rec.2020

Demystifying color gamuts and high dynamic range: Rec.709, DCI-P3, and BT.2020. Learn about 8-bit vs 10-bit quantization banding, electro-optical transfer functions (PQ vs HLG), and HDR10 metadata.

Resolution and framerate describe only the spatial dimensions and temporal frequency of digital video. The actual fidelity and emotional resonance of imagery are defined by color gamut and dynamic range—the spectrum of chromaticity and luminance levels an encoder can represent.

For decades, standard dynamic range (SDR) high-definition video has been anchored to ITU-R Recommendation BT.709, a standard calibrated to CRT monitor phosphors with an 8-bit depth capable of displaying 16.7 million distinct color values.

Modern displays, OLED panels, and cinema projectors have far surpassed these limits. High Dynamic Range (HDR) standards, underpinned by the expansive BT.2020 color gamut and 10-bit/12-bit quantization, expand luminance from 100 nits up to 1,000–4,000 nits, displaying over 1.07 billion distinct chromatic variations.

This engineering guide explores the chromaticity CIE 1931 diagrams, electro-optical transfer functions (EOTF), and metadata formatting required to encode and master HDR video without color distortion.

1. Chromaticity Diagrams & Gamut Triangles

A color gamut represents the triangular boundary of colors reproducible within a given coordinate space on the CIE 1931 xy Chromaticity Diagram.

  • Rec.709 / sRGB: Designed for HDTV and web monitors. Uses D65 white point and identical primaries.
  • DCI-P3: Established by Digital Cinema Initiatives for film projection. Extends deeply into vibrant greens and reds.
  • Rec.2020: The ultra-wide gamut standard for UHDTV. Encompasses monochromatic spectral laser primaries, far exceeding current consumer display capabilities.

2. 8-Bit vs 10-Bit Quantization Depth

Bit depth defines the precision with which luminance and chrominance samples are quantized.

  • 8-bit Color (2^8 = 256 levels per channel): Yields 16.7 million colors. When mapped across high dynamic range (0 to 1,000 nits), the step between luminance levels exceeds the human visual system contrast threshold (Barten threshold), causing visible banding.
  • 10-bit Color (2^10 = 1024 levels per channel): Yields 1.07 billion colors. Smooths out tonal transitions and is mandatory for all HDR mastering and HEVC/AV1 encoding.

3. EOTF Transfer Curves: PQ vs HLG

Traditional SDR video uses a standard power gamma curve (typically gamma 2.2 or 2.4). In HDR, two distinct electro-optical transfer functions have been standardized under ITU-R BT.2100.

  • PQ (ST 2084): Used in HDR10, HDR10+, and Dolby Vision. Maps non-linear digital codes directly to absolute nit values from 0.0001 to 10,000 nits.
  • HLG: Combines standard gamma for lower luminance with a logarithmic curve for highlights, allowing a single stream to render safely on SDR and HDR screens without metadata.

Format & Use Table

StandardCIE Gamut CoverageBit DepthMax Luminance TargetTransfer CharacteristicDominant Application
Rec.709 (BT.709)35.9% of visible spectrum8-bit~100 nits (SDR)BT.1886 / Gamma 2.4Web video, HDTV broadcast, legacy monitors
DCI-P345.5% of visible spectrum10-bit or 12-bitCinema 48 nits / Screen 1000 nitsDCI Gamma 2.6 / Display P3Theatrical cinema mastering, Apple display ecosystem
Rec.2020 (BT.2020)75.8% of visible spectrum10-bit or 12-bitUp to 10,000 nits (HDR)SMPTE ST 2084 (PQ) or HLG4K/8K UHD Blu-ray, premium streaming (HDR10/Dolby Vision)

Step-by-Step Workflow

01

Inspect video color metadata: ffprobe -v error -select_streams v:0 -show_entries stream=color_space,color_primaries,color_transfer,bits_per_raw_sample file.mp4

02

Encode 10-bit HDR10 video with x265: ffmpeg -i master_10bit.mov -c:v libx265 -crf 18 -preset medium -pix_fmt yuv420p10le -color_primaries bt2020 -color_trc smpte2084 -colorspace bt2020nc -x265-params "hdr-opt=1:repeat-headers=1:colorprim=bt2020:transfer=smpte2084:colormatrix=bt2020nc:master-display=G(13250,34500)B(7500,3000)R(34000,16000)WP(15635,16450)L(10000000,1):max-cll=1000,400" -c:a aac -b:a 192k hdr10_output.mp4

03

Tone-map HDR video down to Rec.709 SDR: ffmpeg -i hdr_input.mp4 -vf "zscale=t=linear:npl=100,format=gbrpf32le,zscale=p=bt709,tonemap=tonemap=mobius:param=0.3,zscale=t=bt709:m=bt709:r=tv,format=yuv420p" -c:v libx264 -crf 18 sdr_output.mp4

Frequently Asked Questions

Why does HDR video look washed out when played in standard media players?

This happens when the player fails to tone-map the wide Rec.2020 color gamut and PQ transfer curve down to Rec.709 SDR. The raw HDR values are misinterpreted by the 8-bit display engine as flat, desaturated pixels.

What is the difference between HDR10 and Dolby Vision?

HDR10 uses static metadata (SMPTE ST 2086) set once for the entire movie. Dolby Vision uses dynamic metadata frame-by-frame (SMPTE ST 2094-10) and supports 12-bit precision, allowing scenes to be optimized individually based on target display capabilities.

#color spaces#HDR#Rec.709#Rec.2020#DCI-P3#color gamut#bit depth#dynamic range

Related Articles