tldr :
Voici un outil linux pour convertir des vidéos .360 d’une Gopro Max 2 en images jpg utilisables pour Panoramax :
Version longue :
Les GoPro Max 1 & 2 ont l’avantage d’un mode photo très simple à utiliser. On obtient directement des photos equirectangulaires, géolocalisées, utilisable par Panoramax, Josm ou autres.
L’inconvénient c’est qu’on est limité à une image toutes les 2 secondes, ce qui est souvent trop lent lorsqu’on ne se déplace pas à pied.
Pour augmenter la fréquence de capture, il faut utiliser un mode “timelapse vidéo”. Chez Gopro cela correspond au mode "Timewarp’. Jusqu’à aujourd’hui les problèmes étaient que :
- La qualité des vidéos d’une Gopro Max était trop faible pour obtenir des images correctes.
- On n’avait pas d’outil pour convertir une vidéo en images jpg équirectangulaire qui intègre les métadonnées de la vidéo (geolocalisation, horodatage, etc…)
Mais ça c’était avant ![]()
Depuis 2025, la Gopro Max 2 permet d’obtenir des vidéos d’une qualité quasi équivalente à celle des photos. Il restait à pouvoir convertir ces vidéos en images jpg. C’est ce à quoi je me suis attelé.
Mon point de départ est l’outil gopro2frames proposé par le site Trekview. Il s’appuie sur :
- Exiftool pour la gestion des métadonnées des photos et des vidéos
- Ffmpeg pour l’extraction des frames d’une vidéo
- Max2sphere pour convertir les frames qui sont au format EAC, vers le format équirectangulaire
Je modifié le script ainsi que Max2sphere pour qu’ils gèrent les vidéos d’une Gopro Max 2, j’ai ajouté plusieurs fonctions de détections automatique de la fréquence des vidéos, et des paramètres TimeWarp utilisés au moment de la capture. J’ai amélioré la gestion de certaines métadonnées, en particulier celles concernant l’horodatage. En parallèle j’ai inclus un fork multithread de Max2sphere qui accélère cette étape d’un facteur x5 avec un cpu 12 coeurs.
Ma version est disponible ici : GitHub - Stefal/gopro2frames: Converts GoPro .mp4 (any GoPro) or .360 (MAX only) files into single frames with correct metadata. Supports 360 and non-360 videos. · GitHub
Une fois les dépendances installées, il suffit de lancer gopro2frames en lui indiquant le chemin vers le fichier vidéo .360 pour obtenir en sortie un lot d’images jpg 360° qui contiennent l’horodatage et leur géolocalisation.
exemple gopro2frames GS011065.360
Remarques :
- J’ai fait mes tests sous linux, avec une Gopro Max 2 équipée du firmware Gopro Labs
- Pour Windows, il faudra compiler Max2sphere manuellement. Je n’ai pas essayé.
- Les informations de l’imu pour la stabilisation ne sont pas gérées pour l’instant.
- En cas de regéolocalisation RTK, j’ai constaté un décalage d’environ 250ms à compenser. D’autres retours m’intéresseraient pour savoir s’il est constant ou pas.
- Sur un ordinateur un peu puissant, l’extraction de 1000 images dure environ 10mn.
- Le code d’origine aurait besoin d’un gros nettoyage, et il y a de la marge pour des optimisations.
- Je ne suis pas certain que l’utilisation d’Exiftool pour extraire les métadonnées soit la solution la plus pertinente. Il existe des librairies python basée sur le code fourni par Gopro qui pourraient être plus efficaces.
Divers :
J’ai mentionné l’utilisation du firmware Gopro Labs. Il me permet entre autre de :
- Synchroniser l’horloge de la caméra sur l’horloge venant du récepteur Gnss intégré
- Augmenter le débit par seconde de la vidéo pour améliorer la qualité. Je suis à 300 mb/s
- Générer des i-frames pour chaque frame de la vidéo
- Créer facilement des presets prêt à l’utilisation. Il n’y a qu’à faire scanner un QR code par la caméra. Exemple pour un mode TimeWarp à 2 images par secondes :
https://gopro.github.io/labs/control/set/?cmd=mTWMp2oMPRES="2,Labs-twBikeB300"mTWtcNd1b1wAi64M2sMag1v0q0dToR1*IFRM=1*SYNC=1*ALLI=1
La signification des ‘X’ du mode TimeWarp étant un peu cryptique voici un petit mémo pour des vidéo capturées en 30 img/s :
mode timewarp -> fréquence réelle
x2 -> 15 fps
x5 -> 5 fps
x10 -> 3 fps
x15 -> 2 fps
x30 -> 1 fps

