HDR10, Dolby Vision, and HLG: How to Convert Without Crushing Highlights
iPhone 15 Pro records Dolby Vision. Most editing software shows it wrong. Here's how to convert HDR formats to SDR (or between HDR variants) without losing detail.
Alex Thompson·May 8, 2026·10 min read
Three HDR Formats With Three Different Goals
HDR10, Dolby Vision, and HLG are all "HDR video," but they encode brightness very differently. The format your camera records and the format your viewer's TV expects rarely match. Converting between them (or to SDR for the web) is more than a re-encode. The wrong steps blow out highlights or crush shadows in ways that don't recover.
iPhone 15 Pro records Dolby Vision. Most YouTube videos display HDR10 (or fall back to SDR). Broadcast TV uses HLG. None of these convert cleanly with a default FFmpeg command.
Our video compressor handles SDR encoding. For HDR-to-SDR or HDR-to-HDR conversion, you need format-aware tone mapping. This post covers the three formats, what each one requires for clean conversion, and the pitfalls that produce washed-out or crushed output.
The metadata difference matters. HDR10 says "this entire video has these brightness limits." Dolby Vision says "this scene has these limits, this shot has different limits." HLG says nothing and lets the display infer.
For viewers with HDR-capable TVs, dynamic metadata makes a real visible difference. Dolby Vision content on a properly calibrated TV looks markedly better than HDR10 content of the same source.
For viewers with SDR displays (most laptops, most monitors, most YouTube viewers on phones), all three formats need tone mapping to look correct. The format determines how the conversion works.
Why "Just Re-encode" Doesn't Work
Default FFmpeg output of an HDR source to MP4 produces a file the player thinks is SDR. The pixel values are still in HDR luminance space (PQ or HLG transfer function), but the file metadata says Rec.709 SDR. Result: shadows that should be black show up gray, and highlights that should be eye-searing bright look muted.
The fix is tone mapping. Tone mapping converts the high-dynamic-range pixel values into the lower SDR range, compressing the brightness curve so that highlights and shadows both stay visible.
HDR-to-SDR Conversion (the Common Case)
Most workflows need HDR-to-SDR because the destination is YouTube SDR, Instagram, web players, or a standard monitor. The tone mapping recipe:
zscale=t=linear:npl=100: convert from PQ to linear light (npl=100 sets normalized peak luminance to 100 nits target)
format=gbrpf32le: convert to 32-bit float for tone mapping precision
zscale=p=bt709: convert color primaries from Rec.2020 to Rec.709
tonemap=tonemap=hable:desat=0: Hable tone mapping operator with no desaturation
zscale=t=bt709:m=bt709:r=tv: encode back as Rec.709 SDR
format=yuv420p: 8-bit output ready for H.264
The tonemap operator choice matters:
Operator
Style
Best for
hable
Filmic, cinema-style
General use
mobius
Smooth highlights
Photography
reinhard
Soft compression
Skies and gradients
clip
Hard cutoff
Avoid (crushes highlights)
linear
No compression
Avoid (washes out)
Hable is the Filmic Worlds operator from "Uncharted 2" lighting work. It's the production default for film.
Pro Tip: The desat=0.5 parameter desaturates highlights, simulating the way film loses color in bright areas. For natural-looking output, try desat=0.5 instead of desat=0. For preserving original color: desat=0.
Dolby Vision Specifics
Dolby Vision has two sub-types in iPhone recordings:
Profile 8.4 (HLG-based): the iPhone's "default" Dolby Vision
Profile 5 (PQ-based): used in some older iOS versions
The x265-params block injects the HDR10 metadata directly into the encoded stream. Master display values (R, G, B, white point, luminance) describe the reference monitor.
What "Crushed Highlights" Looks Like
If your conversion has crushed highlights, the symptoms:
Sun, lamps, windows show as flat white circles with no halation
Bright clouds lose detail and merge into the sky
Skin highlights on faces lose dimension
The cause: tone mapping operator clipping at peak brightness. Switch from clip to hable, increase peak parameter, or reduce npl.
If your conversion has lifted shadows (washed-out blacks):
Dark areas show as gray instead of black
Contrast feels low
The picture looks "smoky"
The cause: missing or wrong color range flag. Add range=tv to the output zscale, and verify the player is interpreting Limited range correctly.
Symptom
Likely cause
Fix
Flat white highlights
Clip tone mapping
Switch to hable
Blocky highlights
npl too low
Raise npl to 1000+
Gray shadows
Full range output
Set range=tv
Color cast (green)
Wrong primaries
Verify zscale=p=bt709
Banding in sky
8-bit output too aggressive
Use yuv420p10le if H.265
HDR metadata stripped
Missing master-display
Add x265-params block
DaVinci Resolve and HDR
DaVinci Resolve Studio (paid) handles HDR-to-SDR conversion through Color Space Transform nodes. Workflow:
Project Settings > Color Management > DaVinci YRGB Color Managed
Input Color Space: Rec.2020 ST.2084 1000 nits (for HDR10) or Rec.2100 HLG (for HLG)
Timeline Color Space: Rec.2020 ST.2084 1000 nits
Output Color Space: Rec.709 Gamma 2.4 (for SDR delivery)
Resolve auto-applies tone mapping between color spaces. The Hable operator is the default in DaVinci Wide Gamut. For finer control, add a Color Space Transform OFX in the node graph.
The free version of DaVinci doesn't include the Color Space Transform OFX. The Project Settings approach above still works.
Premiere has improved HDR handling significantly in the 2024 release. For HDR-to-SDR:
Sequence Settings > Working Color Space: Rec.709
Effects panel: Add "Tone Map" effect to the source clip
Tone Map effect: set Source Peak to 1000 nits (for HDR10/Dolby Vision)
Set Target Peak to 100 nits
The Premiere Tone Map effect is reasonable but more conservative than the Hable operator. For commercial work, render an FFmpeg pass first and import the SDR result.
Streaming Platforms and HDR
Platform
HDR support
Notes
YouTube
HDR10, HDR10+
Dolby Vision uploads convert to HDR10
Vimeo
HDR10, Dolby Vision Profile 5
Premium tier required
Netflix
HDR10, Dolby Vision Profile 5
Mastering specs strict
Apple TV+
Dolby Vision, HDR10
Profile 5 only
Amazon Prime
HDR10+, Dolby Vision
Mastering specs strict
Twitch
None
SDR ingest only
TikTok
None
SDR ingest only
Instagram
None
SDR only
For social platforms, you must tone-map down to SDR before upload. The platform won't do it for you, and what you'll see is broken.
Frequently Asked Questions
Why does my Dolby Vision iPhone video look washed out on Windows?
Windows doesn't have Dolby Vision tone mapping built in (most Windows builds). The video plays but the tone mapping is wrong. Either share via AirDrop to a Mac, or convert to SDR before sharing.
Can I view Dolby Vision content on a non-Dolby Vision TV?
Yes if your TV supports HDR10. The Dolby Vision metadata is layered on top of an HDR10 base layer. TVs without DV decoding fall back to the HDR10 layer. You'll lose the dynamic metadata advantage but get correct HDR brightness.
What's the difference between HDR10 and HDR10+?
HDR10 has static metadata (one brightness curve for the entire video). HDR10+ adds dynamic metadata (per-scene brightness curves). HDR10+ output looks closer to Dolby Vision quality on supporting displays. The format is royalty-free, unlike Dolby Vision.
PQ (smpte2084) means HDR10. HLG (arib-std-b67) means HLG. Bt709 means SDR. Bt2020nc means Rec.2020 (often paired with HDR).
Can I record HDR on Android?
Pixel 8 Pro records HDR10+ video. Galaxy S24 Ultra records HDR10+. Most other Android cameras record SDR. iPhone records Dolby Vision (Pro models) or HDR10 (non-Pro since iPhone 14).
Will converting HDR to SDR lose information forever?
The exported SDR file has lost the HDR brightness range. Keep the original HDR source as your master. Re-export from the master if you later need a different SDR look or an HDR delivery.
HDR-to-SDR: FFmpeg with Hable tone mapping, source-appropriate npl (100 for HDR10, 1000 for Dolby Vision), output as Rec.709 Limited range. HDR-to-HDR: x265 with explicit master-display metadata. For social platforms: always pre-convert to SDR before upload. Our video compressor handles SDR encoding once you've completed tone mapping.
HDR10Dolby VisionHLGSDR conversiontone mapping
About the Author
Alex Thompson
Software engineer and content creator focused on web technologies, image optimization, and developer tooling.