Final Cut Pro X dynamic range and colour gamut: Watch out for clipping
Tuesday, 08 September 2015
Now that those promoting UHD are starting to talk about High Dynamic Range and Wide Colour Gamut, it is worth considering what Final Cut Pro X does with brightness and colour information internally.
Here is a still from some footage from EditStock.com - the site that shares rushes from all sorts of productions so people can practice editing and post production - and the scopes showing its range of colour and brightness:
This still shows a good range of colour from 0-100 for red, green and blue as well as brightness (luma) from 0 to 100 - despite the source movie being an H.264-encoded QuickTime movie.
If I apply a Color Board colour correction I can desaturate it and make it darker:
Or I can make it more saturated and make the colours more intense:
The term 'clip' here means that it is impossible for some pixels to be any darker than black or brighter than white.
The question here is what does each effect consider black and white. Does it range from -20 to 120 or from 0 to 100.
The result of each of the Color Board corrections shows values below 0 and above 120, so colour corrections have a wide range. So if both these corrections are applied at the same time…
…the result is that Final Cut first darkens and desaturates the clip so some pixels have brightness and colour levels below 0 (as shown above in the second image) and then brightens them back up:
If brightness is stored as a value between -20 and 120, imagine two pixels that start off as having brightness values of 20 and 15. The first correction - that darkens the clip - might change these values to -4 and -6 - making them so close to fully black as being indistinguishable by eye. Certainly impossible to distinguish between each other. Alternatively, the second correction would change these to 55 and 62 - make them both brighter.
When Final Cut applies both corrections - first 20 being made darker to -4 and then -4 being made brighter to 21 - the pixel almost reverts back to its original brightness value.
The catch is that some Final Cut effects use a smaller brightness range than others.
That means if I apply an Gaussian blur effect to the output of the first Color Board correction, and then apply the second colour correction, the fact that the Gaussian blur only works with brightness values between 0 and 100 means that if a colour board changes values to being less than 0, the blue sees any below 0 as 0.
Using the pixel values from before, the Gaussian blur takes the -4 and treats it as 0. It also clips the -6 to 0. After the blur is applied, the brightness values passed on to the next effect might be the same: 0 and 0.
These are then passed on to the second Color Board correction which brightens both ‘black’ pixels to 35. The difference in brightness between the two pixels has been lost, there’s no way for the second correction to get it back.
Less range in the Gaussian blur effect means all the detail in the temporarily dark parts of the clip it receives is lost:
You can see that there are no pixels with a Luma value of less than 35. The detail of the various brightness values between dark grey and black in the original clip were were all made black by the Gaussian blur effect. When the second correction made those black pixels brighter, all the detail the darker parts of the frame were lost.
Check the result of effects with the video scopes
This means when you apply effects to clips in Final Cut, it is worth checking the video scopes to see what the effects do to the brightness and colour values of your footage. It is often worth changing the order of effects to make sure you don’t lose dynamic range.
In this case moving the Gaussian blur effect to before both colour corrections, prevents the clipping:
I could have also moved the blur to after the second correction.
HDR and WCG precision
High Dynamic Range and Wide Colour Gamut are about being able to encode a wider range of brightnesses and colours. They also require more precision: being able to distinguish the smaller brightness differences between pixels. That’s where ‘bit depth’ comes into HDR and WCG specifications. 8 bits for brightness can store 256 values between 0 and 1. 10 bits can distinguish four times as much detail: 1,024 values between 0 and 1.
NLEs like Final Cut and Premiere can handle HDR, WCG and codecs with high precision internally (such as ProRes 4444 XQ), the next stage for post is finding accurate ways of representing this precision in codecs designed for distribution to viewers.