Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

GoPro Speedometer Visualizer

Generates a chroma-key-ready (green background) speedometer video from GoPro GPS telemetry data exported by gopro2gpx.


WHY USE THIS ?

I didn't find a tool that just gives me plain old greenscreen video feed that i can key into my original video. I've built this tool on top of gopro2gpx. Gopro 2 Gpx has an overlay feature. but I found that the time taken for it to process was ~20 mins for an 8 minute video & I ran out of ram (8GB on my macbook air M3). Feel free to criticize it or add to it. I hope 1 person finds this helpful. If you are that 1 person, A Star in this repo is appreciated.

Requirements

pip install opencv-python-headless Pillow numpy

Step 1 – Export GPS data from your GoPro footage

Use gopro2gpx to extract telemetry from your .MP4 file:

pip install git+https://github.com/juanmcasillas/gopro2gpx 
# Or Download the repository at https://github.com/juanmcasillas/gopro2gpx unpack it and install with 
python -m pip install .

# Export all three formats at once
gopro2gpx -s GH010001.MP4 output
# Produces: output.csv  output.gpx  output.kml

Tip: The .csv and .gpx outputs contain speed data. The .kml file does NOT include speed — use CSV or GPX.


Step 2 – Generate the speedometer video

python speedometer.py output.csv -o speedometer.mp4

All options

usage: speedometer.py [-h] [-o OUTPUT] [--fps FPS] [--unit {km/h,mph}]
                      [--size SIZE] [--max-speed MAX_SPEED]
                      [--smoothing SMOOTHING]
                      input

positional arguments:
  input                 Path to gopro2gpx output (.csv, .gpx, or .kml)

options:
  -o OUTPUT             Output video path (default: <input>_speedometer.mp4)
  --fps FPS             Frames per second (default: 18 — matches GoPro GPS rate)
  --unit {km/h,mph}     Speed unit on the dial (default: km/h)
  --size SIZE           Canvas size in pixels, square (default: 400)
  --max-speed MAX_SPEED Max speed shown on dial (auto-calculated if omitted)
  --smoothing N         Rolling-average window to smooth needle (default: 3, 1=off)

Examples

# Basic usage (km/h, auto dial range)
python speedometer.py output.csv

# Miles per hour, larger overlay, custom dial max
python speedometer.py output.gpx --unit mph --size 500 --max-speed 60

# Silky smooth needle, 30fps sync
python speedometer.py output.csv --fps 30 --smoothing 5

# Full control
python speedometer.py output.csv \
  -o my_ride_speedometer.mp4 \
  --fps 60 \
  --unit km/h \
  --size 600 \
  --max-speed 120 \
  --smoothing 5

Step 3 – Chroma key into your video editor

The output video has a pure green (#00FF00) background — compatible with:

Editor How to apply chroma key
DaVinci Resolve Color → Qualifier → pick green, or Fusion → ChromaMatte
Adobe Premiere Effects → Keying → Ultra Key
Final Cut Pro Effects → Keying → Keyer
CapCut / mobile Overlay → Chroma Key
OBS Studio Filters → Chroma Key

Drag the speedometer clip as an overlay track above your GoPro footage and apply the chroma key effect. Resize and reposition as needed.


Dial appearance

Speed range Arc colour
0 – 60 % of max 🟢 Green
60 – 85 % of max 🟡 Yellow
85 – 100 % of max 🔴 Red

The needle turns orange-red (GoPro style) and the digital readout updates every frame.


Supported input formats

Format Speed data Notes
.csv ✅ speed column (m/s) Best option
.gpx ✅ <gpxtpx:speed> extension Works perfectly
.kml ❌ No speed embedded Warning shown; use CSV/GPX

About

Get Greenscreen Gopro Speedometer video. Built to work with output from juanmcasillas/gopro2gpx

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages