python-GPX-traceEtCompteurV.../README.md
Alex c81724a7ed Découpage des longs trajets en plusieurs vidéos (#1)
Nouvelles options exclusives --morceaux N et --duree-morceau MIN : le
trajet est découpé en morceaux de même durée de trajet, rendus chacun
dans sa propre vidéo (sortie_1.mp4, sortie_2.mp4, ...) avec un cadrage
sur la portion et uniquement les villes qui s'y trouvent. L'aiguille ne
retombe à 0 qu'aux extrémités réelles du trajet.

Closes #1

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-23 18:14:59 +02:00

5.8 KiB
Raw Blame History

GPX - Compteur de vitesse

Image extraite de la vidéo d'exemple (trajet Brest - Plabennec)

Script Python transformant une trace GPX en vidéo MP4 carrée 1024×1024, prête à être incrustée dans un autre montage.

Trace blanche sur fond noir, cercle blanc qui suit le trajet, compteur de vitesse à aiguille et noms des villes traversées.

Table des matières

Fonctionnalités

  • Lecture GPX 1.0 / 1.1 (points trkpt horodatés).
  • Vitesse issue de l'extension gpxtpx:speed (m/s, ex. GeoRide) si présente, sinon calculée à partir des distances et des temps ; lissage léger.
  • Vidéo accélérée à durée fixe (60 s par défaut) : le trajet complet est parcouru du début à la fin.
  • Compteur analogique 0-200 km/h (paramétrable), aiguille et vitesse numérique, placé automatiquement dans le coin le moins encombré par la trace ; l'aiguille part de 0 et y revient sur la première et la dernière seconde.
  • Villes traversées obtenues par géocodage inverse Nominatim (OpenStreetMap), affichées sur la carte dès le début, avec placement des étiquettes qui évite chevauchements et trace.
  • Option zoom : à l'arrivée du véhicule dans une ville, son nom s'affiche en grand au centre de l'image (moitié de la largeur), avec fondu d'apparition et de disparition.
  • Découpage des longs trajets en plusieurs vidéos de même durée de trajet, chacune cadrée sur sa portion et n'affichant que ses villes (évite les noms qui se superposent) ; l'aiguille ne retombe à 0 qu'au vrai début et à la vraie fin du trajet.
  • Cache des villes dans <trace>.villes.json : les exécutions suivantes n'accèdent plus au réseau.
  • Rendu anticrénelé (suréchantillonnage ×2), encodage H.264 yuv420p via ffmpeg, sans fichiers intermédiaires.

Installation

Prérequis : Python 3.10+ et ffmpeg accessible dans le PATH.

python -m venv .venv
.venv\Scripts\Activate.ps1
pip install -r requirements.txt

Utilisation

python gpx_video.py Trajet_16-09-2026_15h38.gpx

Produit Trajet_16-09-2026_15h38.mp4 à côté du GPX.

Option Défaut Rôle
-o, --sortie nom du GPX en .mp4 fichier de sortie
--duree 60 durée de la vidéo, de chaque morceau si découpage (s)
--fps 30 images par seconde
--vmax 200 graduation max du compteur (km/h)
--sans-villes — ne pas géocoder ni afficher les villes
--zoom-villes — nom de la ville en grand quand le véhicule y arrive
--duree-zoom 2 durée d'affichage du nom zoomé (secondes de vidéo)
--morceaux — découpe le trajet en N vidéos de même durée de trajet
--duree-morceau — découpe en morceaux égaux d'au plus N minutes de trajet

Exemple : python gpx_video.py trace.gpx -o balade.mp4 --duree 90 --fps 25 --zoom-villes

Découpage : python gpx_video.py trace.gpx --morceaux 3 produit trace_1.mp4, trace_2.mp4, trace_3.mp4 (avec -o balade.mp4 : balade_1.mp4, ...). --duree-morceau 120 sur un trajet de 10 h 15 donne 6 morceaux d'environ 1 h 42. Les deux options sont exclusives. Chaque ville est affectée au morceau où le véhicule passe à son étiquette.

Notes :

  • Le premier lancement interroge Nominatim (1 requête/s, un point par km de trajet) : compter environ 1 s par km.
  • En cas d'erreurs réseau, la vidéo est générée sans villes et le cache n'est pas écrit. Supprimer <trace>.villes.json pour forcer un nouveau géocodage.
  • Les itinéraires planifiés (ex. export Liberty Rider en <rte>) ne contiennent pas d'horodatage et sont refusés : il faut une trace enregistrée.

Traitement par lot (PowerShell)

gpx_video.ps1 génère une vidéo pour chaque fichier *.gpx du répertoire courant, avec le Python du venv .venv placé à côté du script (créé et équipé de requirements.txt automatiquement s'il n'existe pas ; inutile de l'activer).

cd D:\Traces\Septembre
& "H:\...\GPX - Compteur de vitesse\gpx_video.ps1"
& "H:\...\GPX - Compteur de vitesse\gpx_video.ps1" --duree 90 --zoom-villes

Les arguments sont transmis tels quels à gpx_video.py pour chaque trace (sauf -o, qui écraserait la même sortie). Les traces en échec sont listées à la fin et le script retourne le code 1. En cas d'erreur, la fenêtre reste ouverte jusqu'à un appui sur Entrée (utile en double-clic / « Exécuter avec PowerShell ») ; pas de pause avec -NonInteractive.

Si la politique d'exécution bloque le script : powershell -ExecutionPolicy Bypass -File gpx_video.ps1.

Structure du projet

gpx_video.py                        script principal (lecture GPX, villes, rendu, encodage)
gpx_video.ps1                       traitement par lot des GPX du répertoire courant
requirements.txt                    dépendances Python (numpy, Pillow)
docs/exemple.png                    image extraite de la vidéo d'exemple (README)
Trajet_16-09-2026_15h38.gpx         trace d'exemple (GeoRide)
Trajet_16-09-2026_15h38.villes.json cache des villes de l'exemple
Trajet_16-09-2026_15h38.mp4         vidéo générée pour l'exemple