Skip to main content

Python library for extracting GPS and sensor telemetry from GoPro videos (Hero 5-13). Supports GPS5/GPS9 (10Hz), gyroscope, accelerometer. Python 3.9-3.13.

Project description

pygpmf-oz

Modernized Python library for extracting and analyzing GoPro GPMF (telemetry) data
Supports Python 3.9-3.13 | Windows, Linux, macOS | Active Development 2026

PyPI version Python versions Documentation Status License: MIT Test Coverage


🚀 What's New in v0.3.0

  • Hero 11-13 GPS9 support (10Hz GPS with 9 fields: lat/lon/alt/speed2d/speed3d/days/secs/dop/fix)
  • Gyroscope & Accelerometer module - Extract IMU data for video stabilization
  • 134 tests passing - Comprehensive test coverage for GPS9 and gyro functionality
  • Full backward compatibility - GPS5 (Hero 5-10) continues to work seamlessly
  • UTF-8 FourCC fix - Resolves decode errors in GPMF stream parsing

📖 Documentation: pygpmf-oz.readthedocs.io
📋 Full roadmap: docs/development/DEVELOPMENT_ROADMAP.md
📚 All Documentation: docs/


📦 Installation

pip install pygpmf-oz

For development:

git clone https://github.com/ozand/pygpmf-oz.git
cd pygpmf-oz
pip install -e .

🎯 Quick Start

A python Module to extract GPMF information from GoPro videos.

More information on the format is available on the GoPro GitHub page.

The primary aim of this project is to extract GPS tracks and sensor data from GoPro video files. We use ffmpeg-python to extract the GPMF stream from video files.

import gpmf

# Read the binary stream from the file
stream = gpmf.io.extract_gpmf_stream(my_file)

# Extract GPS low level data from the stream
gps_blocks = gpmf.gps.extract_gps_blocks(stream)

# Parse low level data into more usable format
gps_data = list(map(gpmf.gps.parse_gps_block, gps_blocks))

We rely on gpxpy to easily convert GPS data into GPX segments:

import gpxpy

gpx = gpxpy.gpx.GPX()
gpx_track = gpxpy.gpx.GPXTrack()
gpx.tracks.append(gpx_track)
gpx_track.segments.append(gpmf.gps.make_pgx_segment(gps_data))

print(gpx.to_xml())
<?xml version="1.0" encoding="UTF-8"?>
<gpx xmlns="http://www.topografix.com/GPX/1/1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd" version="1.1" creator="gpx.py -- https://github.com/tkrajina/gpxpy">
  <trk>
    <trkseg>
      <trkpt lat="44.1287283" lon="5.427715">
        <ele>833.759</ele>
        <time>2020-07-03T12:36:56.940000Z</time>
        <sym>Square</sym>
        <fix>3d</fix>
        <pdop>1.82</pdop>
        <extensions>
          <speed_2d>
            <value>9.221</value>
            <unit>m/s</unit>
          </speed_2d>
          <speed_3d>
            <value>9.25</value>
            <unit>m/s</unit>
          </speed_3d>
        </extensions>
      </trkpt>
      ...
    </trkseg>
  </trk>
</gpx>

You can also make an image from you gps track:

import gpmf

# Read the binary stream from the file
stream = gpmf.io.extract_gpmf_stream(my_file)
gpmf.gps_plot.plot_gps_trace_from_stream(stream)

GPS Track Image


🎓 Use Cases

🚴 Sports & Fitness

  • Extract GPS tracks for training analysis
  • Export to GPX for Strava/Garmin compatibility
  • Analyze speed, elevation, distance

🎬 Video Production

  • Sync telemetry overlays with video
  • Create data visualizations for dashboards
  • Export metadata for After Effects

🔬 Research & Analysis

  • Scientific motion studies
  • Vehicle telemetry analysis
  • ML training data extraction

🎮 FPV & Action Sports

  • Video stabilization with GyroFlow (coming Q2 2026)
  • G-force analysis
  • Jump/trick detection

🗺️ Development Roadmap

Q1 2026: Stabilization & Documentation ⚡

  • PyPI publication (v0.2.0)
  • Comprehensive unit tests
  • Sphinx documentation + ReadTheDocs
  • Hero 11/12/13 support

Q2 2026: GyroFlow Integration 🎯

  • Export gyro data for GyroFlow
  • Video stabilization workflow
  • Python API integration

Q3 2026: ML Analytics 🤖

  • Automatic activity detection
  • Trip analysis & statistics
  • Interactive dashboards (Plotly)

Q4 2026: Real-time & Streaming 📡

  • Live telemetry streaming
  • WebSocket API
  • OBS Studio integration

📖 Full roadmap: DEVELOPMENT_ROADMAP.md


🤝 Contributing

We welcome contributions! See CONTRIBUTING.md for guidelines.

Help needed with:

  • Testing with Hero 11/12/13 files
  • Documentation & examples
  • Feature development
  • Bug reports & feedback

📚 Documentation


🔗 Related Projects


📄 License

MIT License - see LICENSE file for details.


🙏 Credits & Attribution

Author & Maintainer: ozand
Original Project: pygpmf by Alexis Mignon

This project (pygpmf-oz) is a modernized fork of the original pygpmf library by Alexis Mignon.
Key improvements include Python 3.9-3.13 support, Windows compatibility, and active maintenance.

Contributors: See CHANGELOG.md


⭐ If you find this useful, please star the repo!
📦 PyPI: https://pypi.org/project/pygpmf-oz/
🐛 Issues: https://github.com/ozand/pygpmf-oz/issues

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pygpmf_oz-0.3.2.tar.gz (32.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pygpmf_oz-0.3.2-py3-none-any.whl (36.3 kB view details)

Uploaded Python 3

File details

Details for the file pygpmf_oz-0.3.2.tar.gz.

File metadata

  • Download URL: pygpmf_oz-0.3.2.tar.gz
  • Upload date:
  • Size: 32.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.3

File hashes

Hashes for pygpmf_oz-0.3.2.tar.gz
Algorithm Hash digest
SHA256 231a9b6e23f84013e2bab07a75218b3daf90b9554a37184ff9c45688ca866f8d
MD5 75c64d268cdc8b18a77843c96b9a07d8
BLAKE2b-256 264606ba38479811e06b59b6ece0269d14db078690fc4b0505489b1382d01135

See more details on using hashes here.

File details

Details for the file pygpmf_oz-0.3.2-py3-none-any.whl.

File metadata

  • Download URL: pygpmf_oz-0.3.2-py3-none-any.whl
  • Upload date:
  • Size: 36.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.3

File hashes

Hashes for pygpmf_oz-0.3.2-py3-none-any.whl
Algorithm Hash digest
SHA256 27d50845649e62be9518c941f9255ec394206ec827082ca1a45c7f642730024f
MD5 c7b9677d7767253c8a461347fc468183
BLAKE2b-256 a271b7b7136c7ce48773e7a0288af12052f1f722774149f0df31766e2667ea0f

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page