iPhone 12 and every iPhone since can record video in HDR, using Dolby Vision, and it is switched on by default. On an HDR screen it looks excellent: bright highlights, deep shadows, lots of colour. Pull a still out of it, though, and the result can look flat, greyish, or slightly off in colour compared with what you saw on the phone.
Nothing is broken, and it is not the image format. It is what happens when a high dynamic range video is turned into an ordinary, standard dynamic range image.
What HDR video actually is
Standard video and standard images (every JPEG and PNG you have ever opened) describe brightness on a fixed scale designed around what older screens could show. HDR video uses a different scale that reaches much brighter highlights, with 10 bits per colour channel instead of 8 so the extra range does not show visible banding.
iPhone HDR is built on a format called HLG (hybrid log-gamma), with Dolby Vision information on top. HLG was designed so that HDR video still looks acceptable on an ordinary screen, but acceptable is doing a lot of work there. Shown without a proper conversion, HLG footage tends to look low in contrast and dull, which is exactly the washed-out look.
Why the preview looks fine and the frame does not
When you extract a frame in a browser, the video is drawn onto a canvas and the canvas is saved as an image. A normal canvas is a standard dynamic range surface, so the browser has to squeeze the HDR picture into SDR first. That squeezing is called tone mapping, and how well it is done varies between browsers and operating systems.
The video player on the page is different. On an HDR-capable screen, which includes most recent iPhones and MacBook Pros, the player can show the HDR picture directly. So you can be looking at a vivid preview and get a flat frame from the very same moment, because the two took different paths to your screen.
This is also why choosing PNG instead of JPEG does not help. The conversion to SDR happens before the image is encoded, so a lossless PNG just preserves the washed-out version perfectly.
How to tell if a clip is HDR
- On the iPhone: if Settings, Camera, Record Video, HDR Video is switched on, everything you have recorded with the Camera app since then is HDR.
- On a Mac: open the file in QuickTime Player and choose Window, Show Movie Inspector. HDR clips mention HLG, HDR or Dolby Vision in the format details.
- Anywhere: MediaInfo, which is free, shows an "HDR format" line for HDR files.
- With FFmpeg installed: ffprobe reports a colour transfer of arib-std-b67 for HLG video.
Check the colour transfer of a clip
ffprobe -v error -select_streams v:0 -show_entries stream=color_transfer,color_primaries -of default=noprint_wrappers=1 input.movFix 1: turn HDR off for future recordings
If most of what you film ends up as stills, gets shared to messaging apps or is watched on ordinary screens, HDR is not doing much for you. Turn it off under Settings, Camera, Record Video, HDR Video. New recordings will be standard dynamic range, and frames will look the way you expect in every browser.
The cost is that those videos lose the HDR look on HDR screens. If you film a lot of bright skies and sunsets and mostly watch them on your phone, you might prefer to leave it on and convert the occasional clip instead.
Fix 2: convert the clip to SDR first
For clips you have already recorded, the most reliable fix is to convert them to standard dynamic range with proper tone mapping, then extract from the converted file. FFmpeg does this well. The command below is long, but it is the same every time: it reads the clip as HLG, converts it to linear light, tone maps it into the standard range and writes an ordinary H.264 file.
Convert iPhone HDR (HLG) video to SDR
ffmpeg -i input.mov -vf "zscale=tin=arib-std-b67:min=bt2020nc:pin=bt2020:rin=tv:t=linear:npl=100,format=gbrpf32le,zscale=p=bt709,tonemap=tonemap=hable:desat=0,zscale=t=bt709:m=bt709:r=tv,format=yuv420p" -c:v libx264 -crf 18 output.mp4This needs an FFmpeg build that includes the zscale filter. Most full builds do. If FFmpeg says it does not recognise zscale, install a full build.
Fix 3: try another browser
Because the tone mapping is done by the browser, the same clip can look noticeably different when extracted in Safari, Chrome and Firefox, or on different operating systems. If a frame looks wrong, extract a few frames in a second browser before converting anything. If one of them looks right, use that one.
HDR is not the same as log footage
Washed-out frames from a GoPro, a DJI drone or a mirrorless camera are often something else: a flat or log colour profile, which is deliberately low in contrast so it can be graded later. The fix there is grading the video before extracting, covered in the action camera guide. Some of those cameras can also record HLG, and that footage behaves like iPhone HDR.
For iPhone video problems that are not about colour, such as files that will not load, see the iPhone video guide.
Try FrameRipper - free, no upload
Extract frames from any video directly in your browser. No sign-up, no file size limits.
Open FrameRipper