Posted by:

David G

David G, Chief Explorer

What we’ve learned whilst building a library of GoPro camera test cases.

In 2022 I wrote an introductory post on the GoPro Metadata Format (GPMF / GPMD) for video telemetry.

You can read it here.

As my understanding has broadened, I have been learning lots about how different GoPro cameras write metadata to the image and video files they produce.

Here are some of the quirks we’ve uncovered…

Beware of time

If the camera time is set incorrectly, GoPro cameras will write the same incorrect time into the files DateTimeOriginal fields.

Here’s a good example.

<ExifIFD:DateTimeOriginal>2022:06:08 15:48:10</ExifIFD:DateTimeOriginal>

In this case, the date time on the camera has been set in the future.

The lesson here is to rely on GPS reported time, should it be available.

 <GPS:GPSTimeStamp>15:47:23</GPS:GPSTimeStamp>
 <GPS:GPSDateStamp>2022:01:12</GPS:GPSDateStamp>

In the above example, you can see the cameras clock was set almost 6 months ahead the actual time reported by the GPS.

This is not unique to GoPro cameras, but does affect them all.

If the camera has been setup with a phone (and uses phone time synced with a ntp server) it’s not a problem, but of course, not everyone sets up their camera like this.

The front (Fusion) image contains the GPS metadata

The Fusion creates two unstitched files (either .jpg’s and .mp4’s).

The front file and back files contains all the metadata for the capture settings, which will usually be different on each lens due to varying light levels on either side of the camera (e.g. shutter speed):

<ExifIFD:ShutterSpeedValue>1/1342</ExifIFD:ShutterSpeedValue>

If you’re looking for GPS and IMU telemetry, this, however, is in the file only.

Here’s an example of the metadata held in the front photo and back photo.

For videos, you can see there is a significant difference between the front video and back video, with the GPMD telemetry stream (and keep in mind the sample used is a short video).

A note determining front and back images

Assuming GPS is enabled GPS identification in the metadata is one way to identify front and back images.

GoPro also use GPFR / GPBK in unstitched videos and GF / GB in unstitched photos, which can be used as another way to identify the front and back files.

Though if the files have been renamed and they hold no GPS, you won’t be able to identify front and back images. Confusingly GoPro print the following metadata in both the front and back images:

<GoPro:DeviceName>Back Lens</GoPro:DeviceName>
<GoPro:DeviceName>Front Lens</GoPro:DeviceName>

Filenames can be used to help identify the camera mode used

The GoPro filename prefixes make it possible to determine some modes used (MAX, Fusion, HERO 10) that is, as noted previously, assuming the files have not renamed.

Even so, that’s not perfect.

Though filename alone can not be relied on to determine the camera mode used

For example, here’s an example of a GoPro MAX;

The difference between a GoPro MAX 360 regular video and timelapse video is not identifiable by filename prefix. A regular video and a timelapse video both start with GS (equirectangular mode) and GH (HERO mode).

It’s the same with the Fusion and HERO 10 too (although the prefixes are slightly different).

It is possible to determine a timelapse shot in timewarp mode the GoPro:Rate tag. e.g.

<GoPro:Rate>2X</GoPro:Rate>

Where the value determines on the mode used (e.g. AUTO, 2X, 5X, 10X, 15X, 30X).

There is one exception – stitched .360’s from the GoPro MAX (using GoPro Fusion Studio), where GoPro:Rate tags are not present.

Timelapse videos not shot in timewarp mode this tag contains the value

<GoPro:Rate>2_1SEC</GoPro:Rate>

However, this is also reported in regular video files. And again, this tag is not found in MAX processed .360’s.

You can however use the track handlers to identify when timelapse mode is being used.

Using the MAX as an example, regular videos always have sound, and therefore an audio track:

<TrackN:HandlerClass>Media Handler</TrackN:HandlerClass>
<TrackN:HandlerType>Audio Track</TrackN:HandlerType>

Whereas timelapse videos have no sound, so no audio track will be present in the video metadata.

Using this information it’s therefore possible to determine if a timelapse mode was used on all cameras, and if it was in timewarp mode (on all cameras except for the MAX).

Unfortunately, except for videos shot in timelapse timewarp mode, you won’t be able to easily identify the timelapse settings used for the capture from the metadata.

You can determine the cameras image settings though

The GPMD contains useful information about the image settings used on the camera, for example if Protune was enabled:

<GoPro:DigitalZoom>No</GoPro:DigitalZoom>
<GoPro:ProTune>On</GoPro:ProTune>
<GoPro:WhiteBalance>AUTO</GoPro:WhiteBalance>
<GoPro:Sharpness>HIGH</GoPro:Sharpness>
<GoPro:ColorMode>GOPRO</GoPro:ColorMode>
<GoPro:MaximumShutterAngle>AUTO</GoPro:MaximumShutterAngle>
<GoPro:AutoISOMax>1600</GoPro:AutoISOMax>
<GoPro:AutoISOMin>100</GoPro:AutoISOMin>
<GoPro:ExposureCompensation>0.0</GoPro:ExposureCompensation>

This can be useful to know should you want to make further modification to the imagery in stitching and post-processing (e.g. altering colour balance).

Dive into our test cases for yourself

One of the most important parts of any software release is testing to make sure it works as expected.

In order to do this, we’ve created content from each mode available on GoPro cameras; Fusion, MAX, and the HERO 10. Some of which are referenced in this post.

All our test files (and indeed all our imagery) are released under a CC BY 4.0 license.

You can find the download links to all our samples (including the ones used in this post) in our Guides.

Metadata samples and the camera user guides can also be found in our GoPro metadata repository on Github.



Never miss an update


Sign up to receive new articles in your inbox as they published.

Discuss this post


Signals Corps Slack