Extracting the metadata in a useful format

Note: This post was originally published in https://community.gopro.com/t5/GoPro-Telemetry-GPS-overlays/Extracting-the-metadata-in-a-useful-format/gpm-p/40293 . This is just a copy for reference. This information might be outdated and most links are broken. For updated solutions, click here.

While the Quick software can display some of the data in the "gauges" format, Hero5's video files have much more to it, many more sensors and detailed data: 

~400 Hz 3-axis gyro readings 
~200 Hz 3-axis accelerometer readings 
~18 Hz GPS position (lat/lon/alt/spd) 
1 Hz GPS timestamps 
1 Hz GPS accuracy (cm) and fix (2d/3d) 
1 Hz temperature of camera

Gauges are also limited to H5 Black files recorded with the GPS on, but the fact is that the sensors record data even when the GPS is off, even in the H5 Session.


EDIT 2019: The rest of this post is useful for geeks, but if you just want to convert your data, you can use the new telemetry extraction tool: https://goprotelemetryextractor.com 

If you wan to contribute to the new code base (javascript), you can do it here https://github.com/JuanIrache/gopro-telemetry 


EDIT: The rest of this post discusses how to manually retrieve the data and can bus useful for customising and improving the results, but here's a package that lets Windows users extract the sensor data to spreadsheet format (csv) by just dropping the video files on the GPMD2CSV.bat file: http://tailorandwayne.com/GPMD2CSV.zip It should work well with both H5 cameras on all resolutions and framerates. Otherwise, let me know. 

EDIT 2: You can contribute to this tool here: https://github.com/JuanIrache/gopro-utils 

EDIT 3: Since many people want to use the data with other software, the GPMD2CSV tool now exports to GPX, KML and JSON formats too. This was possible thanks to: https://github.com/KonradIT/gopro-utils I have not tested it with many cameras, so let me know if anything needs to be fixed.


In these two threads we discussed means of extracting the data: 
- https://community.gopro.com/t5/Cameras/Hero5-Session-Telemetry/td-p/22962/ 

- https://community.gopro.com/t5/Cameras/How-to-see-GPS-data-new-Hero5/td-p/15453 

Suggestions like using Racerender o Dashware came up. But most solutions provided incomplete or inaccurate data, some times nothing at all. 

This is the most complete solution I have found so far: 


Edit 2022: Just use Telemetry Overlay .

Here's a detailed tutorial on how to extract metadata from the Hero5 Session (and the H5 Black with a small tweak). Most video modes of the session record gyroscope, accelerometer and temperature data. These can be useful for visualising info or tweaking the image, for example to stabilise in post-production. Theoretically, the latest firmware update added ISO and shutter-speed metadata. BUT...

- Note1: For me, firmware v2.00 broke all the metadata, and other functions such as manual shutter speed for video, iso modes, external mic... I had to revert back to v1.50. Edit: I still can't read metadata from v2.00, So if you are interested in this, don't update your camera just yet. Firmware v2.00 and beyond can be extracted with the latest versions of the tools. 
- Note2: I learnt all these steps through my own experimentation. They are for advanced users and there might be more professional ways of doing this. This workflow is slow and won't suit most users' needs. 
- Note3: This guide is for Windows but I think all the steps can be done in other OSs. 
- Note4: I take the time to explain this because I want more people to start playing with these data and come up with new ways of extracting it and displaying it. Please share your ideas too.

- Edit: These instructions are now pretty outdated. Most of the work can be done by building the gpmd2csv file in my repo: https://github.com/JuanIrache/gopro-utils But some of the instructions still apply if you want to learn to copy the GitHub repo, its dependencies, build the executable and so on. 

Most of the work necessary to extract the data has been done by stilldavid. https://github.com/stilldavid/gopro-utils 

1: Download ffmpeg and uncompress it somewhere in your hard drive: https://ffmpeg.org/ 
2: Download and install Go Programming Language: https://golang.org/ (don't worry, you don't need to know coding to get the data out). Make sure to download a Windows build if you are on Windows 
3: Create a folder in %USERPROFILE%\go\src\github.com\stilldavid\ (replace %USERPROFILE% with you user profile folder, usually something like c:\Users\yourName\) You can get more help on this here: https://golang.org/doc/ 
4: Download the gopro-utils from https://github.com/stilldavid/gopro-utils by clicking on the green "Clone or download" button. Download as zip. (stilldavid's version of the tools tend to be outdated. I try to keep them working here https://github.com/JuanIrache/gopro-utils ) Edit: , you can just "git clone" the repo. 
5: Unzip what you just downloaded, open the new folder and copy its content (it's also a folder named "gopro-utils-master") in the \stilldavid\ folder that you just created. 
6: Remove the "-master" part from the folder name, so that it becomes "gopro-utils" 
7: Like before, create a folder called %USERPROFILE%\go\src\github.com\paulmach\ and repeat steps 4, 5 and 6 with these projects that gopro-utils needs to work: https://github.com/paulmach/go.geo and https://github.com/paulmach/go.geojson 

- Note5: If you just want to extract GPS data the way stilldavid conceived it, you're almost set up. I modified one of the files so that the Gyro, Accel and Temp information can be extracted in spreadsheet format.

8: Go to your folder \go\src\github.com\stilldavid\gopro-utils\bin\gpmd info\ and replace the file gpmdinfo.go with my modified version of it: http://tailorandwayne.com/gpmdinfo.go (you can do it by "saving as" from your browser or by editing the gpmdinfo.go in notepad and pasting the modified content).

Edit: Instead, you can just build the file from my repo: https://github.com/JuanIrache/gopro-utils/tree/master/bin/gpmd2csv 

- Note6: If you own a H5 Black (I don't), you can modify my file so that it also saves GPS data by uncommenting the GPS parts, that is, removing all the /* and */ lines and then saving the file. More data can be retrieved if you look into the gopro-utils code.

9: Still in the \gpmdinfo\ folder, unselect any file and do SHIFT+RIGHT MOUSE CLICK and select "Open command window here" 
10: In the command prompt, write "go build", withouth the quotes and press ENTER. This should create a gpmdinfo.exe file. If you did it all right, you won't need to repeat the previous steps.

-- Repeat from here for additional video files

11: Copy your gopro video file and open the \ffmpeg\ folder that you created in step 1. There, open the folder called \bin\ and paste your video file 
12: Open a command prompt like in step 9 and type: "ffmpeg -y -i filename.MP4 -codec copy -map 0:3 -f rawvideo filename.bin" without quotes, where filename must be replaced with the name of your file. This will produce a .bin file. Edit: If framerate is higher than 60fps, replace 0:3 with 0:2 
13: Cut both the .bin and your .mp4 video files and go back to the \gpmdinfo\ folder of step 8. Paste them. 
14: Open a command prompt and type: "gpmdinfo -i filename.bin". This will create 3 files accl.csv, gyro.csv and temp.csv. These are the data you were after. Open them with Excel or any similar software or create whatever you want with them. Copy them somewhere safe with the original video file, as the next file you process will overwrite them.

One simple thing you can do with all this is see the G-forces that the camera or yourself experienced during the shot. 
I have also been playing with the data and it is really useful for stabilising the image, for example, without having to enable that setting in the camera and, therefore, without losing quality or field of view. Data is being recorded even in 4K, which means we can stabilise 4k footage! Will share my work on another post in this group. Unfortunately, it seems like nothing is recorded on framerates above 60fps. But I don't see why that wouldn't come in a future firmware update, if people start using these features. Edit: We can also stabilise high framerate footage.