What we’ve learned whilst building a library of GoPro camera test cases for Explorer.
In 2022 I wrote an introductory post on the GoPro Metadata Format (GPMF / GPMD) for video telemetry.
As work on Explorer has progressed, we’ve 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
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.
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):
If you’re looking for GPS and IMU telemetry, this, however, is in the file only.
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
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;
- 360 video (raw),
- 360 video,
- HERO video (.mp4),
- 360 timelapse video (raw),
- 360 timelapse video (stitched),
- 360 timelapse video timewarp mode (raw),
- 360 timelapse video timewarp mode (stitched),
- HERO video,
- HERO video timelapse mode,
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.
Where the value determines on the mode used (e.g.
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
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.