Journal GPX2Video - GPS & Vidéo

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
15
9
oct.
2021

Pendant quelques années, j'ai utilisé une GoPro Hero 5 Black pour filmer quelques activités sportives. Je n'ai trouvé aucun logiciel sous Linux pour effectuer mes petits montages vidéos et y insérer les données de télémétries (issues du GPS de la caméra ou d'un GPS externe).

La seule solution que j'ai trouvée est de me tourner sous Windows avec finalement très peu de solution gratuite : GoPro Quick for Desktop ou encore Garmin Virb Edit.

L'application Garmin Virb Edit n'est pas très pratique car elle ne sait pas lire les données du GPS issues de la caméra. Et par conséquent, la synchronisation des données d'un GPS externe avec la vidéo est assez approximative !

L'application fournie par GoPro a l'avantage d'être simple mais elle ne sait lire que les données du GPS interne et il est impossible de les compléter avec les données d'un GPS externe !

Depuis mon passage à la GoPro Hero 9 Black (et en fait ça concerne tout ce qui sont passés à la GoPro 8 et suivantes…), GoPro Quick ne supporte plus ces caméras et surtout n'est plus maintenu par GoPro !

N'ayant au final aucune solution idéale et surtout aucune solution sous Linux, j'ai fini par prendre mon clavier et commencer à écrire un petit outil réalisant cela.

La première étape consiste à incruster les données GPS dans l'image sans en modifier les propriétés. Puis de faire le montage vidéo.

Les objectifs du développement (qui seront en C++) :

1°/ Ajouter en overlay les données issues du GPS sur la vidéo. Cet outil en ligne de commande conservera les propriétés du format de la vidéo. Les données GPS devront être fournies au format GPX (il existe déjà pour cela plusieurs outils permettant d'extraire les données d'une GoPro)

2°/ Synchroniser automatiquement la vidéo & les données GPS. A ma grande surprise, l'heure de la GoPro n'est pas synchronisée à l'heure du GPS !!! Idéalement, il faut configurer l'heure de la GoPro depuis l'application sur le téléphone, sinon on ne peut pas configurer les secondes ! Le problème est que l'heure de la caméra dérive avec le temps, il faut donc faire cela de temps en temps. La GoPro ne connait pas non plus les fuseaux horaires…
On a donc l'heure approximative de création de la vidéo.
Et dans les données GPS on a l'heure exacte.
=> A partir de là, je serai capable de connaitre l'offset entre les deux.

Bien sûr, il sera possible d'indiquer un offset manuellement, si jamais la caméra n'a pas acquis le signal GPS, ou encore si ce n'est pas une GoPro :)

3°/ Paramétrer la position et la taille des jauges.

4°/ Incruster la cartographie et la trace GPS.

5°/ Modifier le format de la vidéo (encodage, taille, durée…)

6°/ Pourquoi pas l'intégrer dans une application de montage vidéo (afin de profiter de l'interface graphique)

Vous trouverez ici un début :
http://progweb.com/gpx2video-tool.zip

Le binaire a été construit sous Debian buster. Je fournirai prochainement l'application packagée pour Debian. Puis dans un second temps, les sources devraient être disponibles quand j'aurai nettoyé un peu le code.

$ ./gpx2video --media ./my-videos/my-video-clip.mp4 --gpx ./my-data/activity.gpx --output video.mp4
  • # Incrustation avec kdenlive

    Posté par  (site web personnel, Mastodon) . Évalué à 6.

    j'ai été confronté également au même problème avec ma GoPro, j'avais bricolé un script qui génère du texte à partir d'un fichier gpx et que j'intègre en tant que sous titre sous kdenlive, pas génial, génial mais ça donnait un résultat plutôt correct. L'avantage est qu'on pouvait du coup utiliser les infos GPS venant d'une montre GPS et pas seulement de la caméra, il faut bien sûr qu'elle soit bien synchronisée avec l'horloge interne de la GoPro.
    Plus de détails par ici.

    https://www.funix.org mettez un manchot dans votre PC

  • # Un outils similaire

    Posté par  . Évalué à 6.

    En effet c'est une fonctionnalité qui manque, surtout sur linux.

    Je développe depuis un moment un outils avec des objectifs similaires (offload facile, indépendant de la marque de camera, édition rapide, prise en charge des données de télémétrie, cartes…).
    Il y a déjà tout le code nécessaire à la lecture et export des données gopro et gpx, et l'overlay vidéo est un des trucs qui reste encore sur ma todo list.

    https://github.com/emericg/OffloadBuddy

    l'heure de la GoPro n'est pas synchronisée à l'heure du GPS

    Oui, ce sont vraiment des idiots sur ce point, et c'est pourtant pas faute de l'avoir fait remarquer…

    • [^] # Re: Un outils similaire

      Posté par  . Évalué à 2.

      l'heure de la GoPro n'est pas synchronisée à l'heure du GPS

      Oui, ce sont vraiment des idiots sur ce point, et c'est pourtant pas faute de l'avoir fait remarquer…

      C'est peut-être leur manière de ne pas gérer le "rollover week".

      Les vrais naviguent en -42

    • [^] # Re: Un outils similaire

      Posté par  (site web personnel) . Évalué à 1.

      Je ne connaissais pas, ça semble plein de promesses. Si je trouve le temps j'essaierai.

      gpx2video n'est bien sûr pas limité à la GoPro. La spécificité GoPro n'est utilisée que pour la sychronisation de la vidéo avec le GPS.

      gpx2video est en C++ et est basé sur FFmpeg. Pour la manipulation des picto et l'écriture des données de télémétrie, j'utilise la librairie OpenImageIO. Pour le parsing du GPX, j'utilise la librairie gpxlib. Et enfin, j'utilise la librairie geographiclib pour les calculs de coordonnées.

      Il me reste quelques petites améliorations à faire pour avoir un premier outil utilisable.

      Puis je vais étudier l'intégration de la cartographie à la vidéo. Il faut que je trouve une librairie (sans doute basée sur OpenStreetMap) en C/C++.

  • # Shotcut version ≥ 21.08 a un filtre GPS

    Posté par  (site web personnel) . Évalué à 4.

    Salut, je ne suis pas sur d'avoir bien saisi la problématique mais il semblerait que Shotcut (en plus d'être un excellent logiciel de montage) a le filtre qui va bien pour afficher les datas issue du gps. Voir ce post sur le forum (en) : https://forum.shotcut.org/t/gps-text-video-filter/29278

  • # Une autre solution

    Posté par  (site web personnel) . Évalué à 4.

    GPS data overlay on videos

    ça date mais la personne derrière continue a faire de la maintenance

    • [^] # Re: Une autre solution

      Posté par  (site web personnel) . Évalué à 1.

      J'ai trouvé le traitement relativement lent. Et comme j'ai pour objectif de pouvoir intégrer cela dans une interface déjà existante, ce n'était pas la bonne solution.

      De plus, si le développeur continue la maintenance, il ne semble pas continuer le développement de manière très active.

  • # Encore un script maison :)

    Posté par  . Évalué à 3.

    Il y a quelques années j'avais développé un script qui génère une suite d'images (1 par seconde) à partir du GPX. Ensuite j'incopore ces images dans la vidéo avec kdenlive.

    https://jonathanatton.wordpress.com/gpxtoimages-convertir-un-fichier-gpx-en-une-liste-dimages-avec-la-vitesse/

    Titre de l'image

    • [^] # Re: Encore un script maison :)

      Posté par  . Évalué à 1.

      Bonjour,
      je voudrais vous contacter au sujet de ce script : je voudrais l'utiliser mais j'ai un message d'erreur concernant argparse. Pour utiliser votre script je lance un terminal dans le dossier ou se trouve mon fichier gpx (x.gpxx) et dans lequel j'ai créé un dossier xx et je tape la commande suivante "python gpxtoimages.py -g x.gpx -o /xx" L'erreur obtenue est : "line 396
      raise ValueError(f'empty group {group}')" Avec l'adresse du fichier argparse.

      Pourriez vous me dire ou se situe mon erreur ?

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.