Getting HDR video from GoPro cameras

What if you were told it’s possible to capture and deliver HDR from GoPro cameras going all the way back to the HERO5 and possibly earlier? How then do we capture and deliver true High Dynamic Range video from a GoPro?

Firstly, let’s clarify a point – with the release of the HERO12, GoPro introduced an HDR video mode. Despite being labelled as “HDR”, this is not a true HDR preset and instead stitches a high exposure and low exposure scene together as a processed Standard Dynamic Range video. This is similar to the gimmicky “HDR” photo setting that can be found on numerous cameras and apps these days. Instead, what we are looking to do is capture as much dynamic range for grading and even delivering HDR.

The key to recording or delivering HDR from a GoPro is understanding the encoding presets and settings available on the camera. Ever since the HERO3 Black series, GoPro have offered a “Protune Flat” preset. This is a pseudo-log encoding which bypasses tone mapping and artistic tweaks in order to provide a minimally processed video. With the release of the HERO12, GoPro also added GP-Log which is another pseudo-log profile derived from the original Protune Flat curve. Instead of using a log base value of 113, the GP-Log curve uses a log base value of 400. The GP-Log profile was also originally offset by -2 EV when first released, effectively providing nearly 4.5 stops of range above mid-gray. Due to numerous complaints, the GP-Log preset was subsequently adjusted to revert back to a 0 EV exposure offset in a later firmware release. These profiles are shown in the characteristic curves below.

GoPro Protune Flat & GP-Log curves
Protune-Flat and GP-Log characteristic curves

As can clearly be seen, there is no magic sauce to GP-Log. The dynamic range hasn’t changed at all, but GP-Log is now encoded along different coding points compared to Protune Flat. The primary complaint of “noise” and darkness with the initial GP-Log implementation was unfairly attributed to the -2EV exposure offset lock when in reality the issue was much more nuanced.

Recall how it was noted that outside of Protune Flat, GoPro cameras had a degree of processing applied to recordings. Part of this processing included tone mapping, where the brightest parts of an image were mapped down to bring the image back to an SDR (Rec.709) space for a distinct “GoPro look”. The look was made possible due to the fact that GoPro’s auto-exposure algorithm had a tendency to preserve highlights by slightly under-exposing a scene. This under-exposure was then corrected as part of the look with highlights tone mapped to provide a smoother highlight roll-off and clipping.

The aforementioned exposure bias has also been carried across to the Protune Flat profile and now the GP-Log profile. Depending on the dynamic nature of a scene, the resulting under-exposure could be anywhere between -0.5 EV to -2 EV. If one considers that the original GP-Log profile was -2 EV under-exposed by default and the auto-exposure algorithm was also programmed to bias towards highlight preservation, a GP-Log encoded video had the potential to be under-exposed by up to -4 stops on such a small sensor! When grading attempts were made with such footage, a lot of noise would easily become visible and hence the resulting complaints for the earlier GP-Log release.

Capturing High Dynamic Range

What does all this detail have to do with capturing HDR from a GoPro or even delivering HDR for that matter? Circling back to the point on highlight preservation bias by the auto-exposure algorithm, any Protune Flat clip going back to earlier GoPro cameras also had a tendency to under-expose. When proper Color Space Transforms such as the GP-Tune Transform or a corrective LUT such as the GP-Tune LUTs were applied to such a clip, the scene would noticeably become darker. This again is a symptom of the highlight preservation bias inherent to GoPro cameras. But the very same bias can also be advantageous for HDR content.

Consider the Protune Flat curve as an example. If we were to deliberately under-expose a scene (ETTL), this adjustment would push a signal further to the right – that is, adding more range to the highlights and less to the shadows. We can see this in the characteristic curve below where a Protune Flat curve has been under-exposed by -1EV, -2EV and -3EV respectively with proportionally greater range given to the respective highlights.

Protune Curve
Protune Characteristic curve with different exposures

Keeping under-exposure advantages in mind, one could record a Protune Flat or GP-Log clip with 0 EV offset, 1600 maximum ISO and apply a +1 or +2 stop exposure compensation adjustment in post. This would theoretically provide 3.5 to 4.5 stops of latitude above middle gray. Considering that most modern cameras have Log profiles peaking around 6 stops above middle gray, 4.5 stops above mid gray sounds like a happy medium given the small sensor size on GoPro cameras. In brighter scenes, it may even be possible to under-expose by – 3 EV overall to provide 5.5 stops of latitude above mid-gray. At the end of the day, it must be emphasized that the sensor is not magically capturing additional dynamic range by under-exposing. What has changed is where the sensor is capturing light relative to middle gray and encoding the code values accordingly. This crucial detail is what we can then leverage as part of our color correction process.

Delivering HDR with LUTs

Now that we’ve understood capturing high dynamic range, let us consider delivering HDR as well. For a quick and simple HDR export of GoPro footage, one could apply a PQ or HLG HDR LUT with +1, +2 or +3 EV compensation from the GP-Tune LUT Pack. Depending on the level of under-exposure within a clip, the included LUTs would provide suitable coverage for HDR delivery.

Using DaVinci Resolve as an example, a non-color managed project could be set up using the Rec.2020 ST2084 1000 nits preset as the output and the equivalent HDR LUT applied directly to the clip or in the node structure. This is shown in the example below with a GP-Log Wide to +3 EV Rec.2020 PQ 1000nit LUT applied in the first node.

GoPro GP-Log WIDE to PQ HDR Project in Resolve

Precisely this method was used to correct the clips in the video below. All shots were -2 EV under-exposed with the auto-exposure algorithm also under-exposing by roughly -1 EV. The clips were corrected by applying the relevant +3 EV PQ LUT and exporting as HDR in a non-color managed workflow.

To reiterate, as GoPro cameras have a tendency to auto-expose scenes by up to -2 EV, any Protune Flat, GP-Log or other Custom LOGB curve can be adjusted accordingly and corrected as part of the color correction process. If using GoPro Labs firmware for example, one could use the “EVBS” FourCC parameter to increase the exposure compensation bias by 2/3 EV (EBVS=0.667) or 1 EV (EVBS=1.0) whilst setting the in-camera Exposure Compensation to -2 EV. By doing so, a +2 or +3 EV exposure adjustment could then be applied as part of the color correction process. Make note to limit the maximum ISO to or below 1600 as the camera may inadvertently apply additional gain to overcompensate.

Delivering HDR using GP-Tune Transform

For more complex workflows, the GP-Tune Transform gives additional grading flexibility and customizations not possible with a LUT. The transform offers a customizable list of input and output parameters with some key functions such as Exposure Correction all available within a single DCTL for use within DaVinci Resolve Studio.

GP-Tune+ Transform parameters

The additional GP-Tune+ Transform also includes advanced settings such as Desaturation, Highlight Rolloff and customizable White Balancing parameters. The custom white balance values can be manually adjusted or aligned to follow the WRGB gain values extracted from the video metadata. The gmpf-parser tool from GoPro can be used to view a subset of this WRGB metadata.

The GP-Tune Transform can be used in a non-color-managed workflow with the DCTL as the first node with a common output setting such as DaVinci Wide Gamut/Intermediate and a subsequent color space transform node outputting to HDR for delivery.

The GP-Tune Transform could also be used in a Color Managed workflow such as ACES and Resolve Color Management. Using RCMv2, the GP-Tune Transform can be applied to each clip in the node structure with the DCTL output aligning with the Timeline setting. GoPro clips could be imported in an ACES workflow using DaVinci Resolve and corrected using relevant ACES IDTs from the GP-Tune Transform bundle as well. The ACES IDTs work across both the Free and Studio versions of Resolve without limitations.

GoPro ACES IDTs
GP-Tune ACES IDTs

With input settings selected for each clip, Output settings could be defined as any of the HDR flavors available such as the Rec.2020 ST2084 (1000 nits) Output Transform. Due to the consistent nature of ACES, one could also toggle between HDR and SDR outputs with relative ease and little to no grading modifications.

The waveform below is from a GP-Log clip that has been corrected by 3 stops using the GP-Tune transform, essentially peaking around 620 nits in an HDR setup without any tone mapping applied.

Waveform of GoPro clip peaking at 5.5 stop above mid-gray

The following video contains clips that have been corrected using the GP-Tune Transform with the color management methods described earlier.

Conclusion

GoPro cameras pack an amazing punch and have been gaining more advanced features with every release. These cameras are further enhanced with GoPro Labs, unlocking many advanced features such as LTC Timecode Sync, higher bitrates and advanced scripting for countless automations. By understanding the capabilities available with Protune Flat, GP-Log and custom LogB profiles as well as understanding the auto-exposure metering design, one can unlock the true potential of HDR content available from a GoPro camera sensor. This dynamic range can be taken advantage of for future proofing projects where HDR delivery can be toggled with relative ease.

When it comes to working with HDR source content, consider a general rule that under-exposure (ETTL) is right as that pushes the corrected signal to the right and over-exposure (ETTR) is wrong as that pushes the corrected signal to the left. Most normal people tend to have a dislike of the far-right and the far-left, so as a general rule of thumb, stick to the middle ground and lean slightly to the right when in doubt – that is stick to -1 EV or -2 EV under-exposure at the most as that will provide up to 4.5 stops of latitude above mid-gray whilst keeping noise relatively low. Importantly, also make note to keep the maximum ISO at or below 1600 to prevent the camera from overcompensating and increasing noise due to increased sensor gain. From here, delivering HDR (if desired) is relatively straight forward.

For more details on using the GoProTune LUTs or GP-Tune transform, refer to the relevant user manuals or associated video tutorials.

One Reply to “Getting HDR video from GoPro cameras”

Leave a Reply