Incrustation information GPS dans vidéo

Puisque je sors en planche à voile avec ma montre GPS garmin forerunner, je cherchais une astuce pour pouvoir intégrer les informations de temps et de vitesse dans mes vidéos en incrustation. Je pense avoir trouvé le moyen, même si ça reste perfectible et oblige à bien mettre à l’heure la caméra GoPro.

Tout d’abord il faut exporter la trace GPS au format gpx, turtlesport le permet. Par défaut il n’y a que les positions et l’altitude, pour rajouter la vitesse et la route, avec gpsbabel on tape

gpsbabel -t -i gpx -f sortie-30-12-2012.gpx -o unicsv -x track,course,speed -F output.txt

cela va donner un fichier qui ressemble à ça :

3,48.367354,-4.769260,-0.3,0.63,324.0,2012/12/30,10:15:14
4,48.367383,-4.769314,-0.8,2.57,309.2,2012/12/30,10:15:16
5,48.367382,-4.769321,-1.3,0.20,257.2,2012/12/30,10:15:19
6,48.367487,-4.769312,-2.3,0.69,3.2,2012/12/30,10:15:36
7,48.367630,-4.769355,-2.7,4.06,348.9,2012/12/30,10:15:40

on retrouve le numéro du point, la position, l’élévation, la vitesse (en m/s), la route en °, puis la date et l’heure. Maintenant sur le logiciel de montage, on va repérer dans le temps la séquence vidéo sur laquelle on va placer l’incrustation GPS. A partir du fichier output.txt on va créer un nouveau fichier contenant les points qui correspondent à la séquence vidéo, on l’appelle points.txt. J’ai créé un petit script qui va créer autant de fichiers .txt qu’il y a de points dans points.txt , il se lance en mettant en argument le fichier points.txt obtenu ci-dessus

#!/bin/bash
awk -F"," '{
label="label"NR".txt"
print "V:"$5*3.6,"T:"$8 > label;
} ' $1

chaque fichier obtenu se nomme label+numéro de point.txt et contient le champ avec le format suivant V:31.212 T:10:49:57. C’est ce qui apparaîtra ensuite en incrustation dans la vidéo, à cette occasion j’ai converti l’information de vitesse en km/h, mais rien ne vous oblige à appliquer d’autres traitements. Ensuite j’ai fait un deuxième script qui va créer une image gif avec le texte en bleu avec un fond transparent à partir de chaque fichier .txt

#!/bin/bash
for fichier in $(find . -name "label*.txt"); do
fullfilename=$(basename $fichier)
extension=${fullfilename##*.}
filename=${fullfilename%.*}
label=$(cat $fichier)
convert -background none -fill blue -size x15 -gravity center label:"$label" $filename.gif
done

On le lance simplement en se mettant dans le répertoire où se trouvent les .txt. Et voilà je me retrouve avec tout un stock d’images qui j’intègre en diaporama dans mon logiciel de montage vidéo kdenlive. Seul problème le temps entre 2 points GPS n’est pas constant, du coup je me suis fendu d’un autre script qui va calculer la moyenne entre deux points, on le lance en mettant points.txt en argument

#!/bin/bash
awk 'BEGIN { FS=","}
NR ==1 {
heure=substr($8,1,2)
minute=substr($8,4,2)
seconde=substr($8,7,2)
temps1=heure*3600+minute*60+seconde
delta=0
diff=0
}
NR > 1 {
heure=substr($8,1,2)
minute=substr($8,4,2)
seconde=substr($8,7,2)
temps=heure*3600+minute*60+seconde
delta=temps-temps1
temps1=temps
somme=somme+delta
}
END { print somme/(NR-1) }’ $1

C’est la moyenne qui détermine le temps entre deux images à la création du diaporama avec toutes les images obtenues. Ensuite dans la timeline, il faut faire chevaucher sur 2 pistes différentes le diaporama et la séquence vidéo, rajouter une transition composition, et faire une incrustation dans un coin des informations GPS, et le tour est joué.

Le plus compliqué dans l’affaire est de faire coïncider l’information GPS avec la séquence vidéo, tout est histoire de synchronisation entre le GPS et la caméra à l’avenir, je veillerai à bien mette à l’heure ma GoPro, ça aide grandement ensuite à s’y retrouver.

2 réflexions sur « Incrustation information GPS dans vidéo »

  1. Merci pour le partage, enfin de debut de GARMIN VIRB Edit pour linux.
    Cela donne des idées …

    Bonne continuation Funix

Laisser un commentaire