Портативная утилита: открываешь видео GoPro (.MP4) → из встроенного GPS-потока (GPMF) извлекается трек со всего видео → рисуется интерактивная 3D-траектория прыжка, которую можно крутить мышью, с автоматически размеченными фазами полёта и спутниковой подложкой. Подходит для вингсьюта, фрифола и полёта под куполом.
pip install -r requirements.txt
python app.py [файл.MP4]
Либо собрать портативный exe (см. «Сборка») и перетаскивать .MP4 прямо в окно.
Трек красится по фазам (детектор по высоте и вертикальной скорости):
- ⬜ серый — предполётное в самолёте / стояние на земле (тонкая полупрозрачная линия там, где GPS не писался — набор высоты в самолёте);
- 🟧 оранжевый — свободное падение / вингсьют;
- 🟦 голубой — под куполом.
Плюс: секундные засечки (белые точки, подписи каждые 5 с), метки EXIT (выход), OPEN (раскрытие), LAND (приземление), «тень» трека на земле, и спутниковая подложка (Esri World Imagery) на плоскости земли. Панель слева — статистика по каждой фазе (время, скорость снижения, glide ratio, макс. горизонтальная скорость).
Секунды считаются от выхода (0 с в верхней точке) вниз до приземления (максимум у земли). Управление: ЛКМ — вращать · колесо — зум · Shift+ЛКМ — сдвиг.
Кнопки вверху:
- «🛰 Satellite ground» — вкл/выкл спутниковую карту;
- «⬇ Top view» — вид строго сверху (2D-план полёта над картой);
- «💾 Export GPX/KML» — сохранить трек (GPX для Google Earth/анализаторов, KML с реальной высотой);
- «Max DOP» — порог отбраковки неточных GPS-точек.
GoPro часто теряет GPS-фикс в самолёте и в скоростном свободном падении (металл фюзеляжа, вращение, высокая скорость), а заново ловит уже под куполом. Поэтому в части файлов сам фрифол в GPS отсутствует — он показан серой «предполагаемой» линией от последней точки до места, где фикс восстановился. Где GPS во время вингсьют-полёта держался — фаза будет оранжевой с реальной траекторией. Если фрифол не показывается, попробуй поднять «Max DOP».
gpstrack.py— самодостаточный парсер: читает MP4 напрямую (mmap, без ffmpeg), находит дорожкуgpmd, парсит GPMF (KLV): GPS9 (HERO11/12/13) и GPS5.app.py— GUI (PyQt5 + pyqtgraph/OpenGL), очистка трека, детектор фаз, 3D-сцена.tiles.py— загрузка и стыковка спутниковых тайлов Esri (с кэшем в %TEMP%).shot.py— офскрин-рендер в PNG (для проверки/скриншотов).geotag_potplayer.py— проставляет кадрам-скриншотам из PotPlayer время съёмки исходного видео и медианную GPS-точку полёта (нуженexiftoolв PATH; пути к видео и фото задаются константами в начале файла).
python -m PyInstaller --noconfirm SkydiveTrack3D.spec
или одной строкой без .spec:
python -m PyInstaller --noconfirm --onefile --windowed --name SkydiveTrack3D ^
--collect-submodules pyqtgraph ^
--hidden-import OpenGL.platform.win32 --hidden-import OpenGL.arrays.numpymodule ^
--hidden-import PyQt5.QtOpenGL app.py