Kinodioraptor : commencer par la fin
Récapitulation
Kinodioraptor se veut principalement un outil de manipulation de la piste audio des vidéos, de manière à produire des balades aussi douces que possible à l’oreille en amenuisant principalement le bruit du moteur des véhicules motorisés trop bruyants (surtout ceux qui arrivent de derrière en frôlant le cycliste). Dans sa mouture actuelle, je lui ai ajouté des outils de découpage vidéo et d’édition GPX. Voici à quoi il rassemble au moment où j’écris ceci.

C’est l’onglet principal, celui du lecteur. En plus des boutons du menu, il est associé à des raccourcis qui permettent de faire plusieurs opérations.
Pour le son, je procède par réencodage, afin d’ajouter de petits fondus sonores entre les sections où j’atténue le bruit des voitures.
Pour le découpage des vidéos, que je fais sans réencodage pour sauver du temps (beaucoup de temps), le problème le plus délicat est celui du rapiéçage des morceaux.
Le problème
Prenez un fichier mp4 au hasard. Le cycliste roule pendant quelques minutes puis, à une intersection, tourne à gauche alors qu’il aurait dû aller à droite. Il revient donc sur ses pas jusqu’à l’intersection, repasse en s’efforçant de rouler à la même vitesse et de passer au même endroit que la première fois, puis tourne du bon côté cette fois-ci.
Au moment du montage vidéo, si Kinodioraptor ne veut pas ré-encoder, il va devoir se contenter des images-clés (keyframes) pour choisir le début et la fin de la section à couper, sinon le nouveau fichier créé sera fort probablement corrompu. Or, dans le cas d’un fichier qui sort de ma GoPro, ces images-clés se trouvent à intervalles de 1,001 seconde. Et c’est là que le bât blesse quand vient le temps de découper. Regardez bien cette image.

Une minute plus tôt, j’aurais dû tourner à droite, juste avant le poteau de droite, mais j’ai pris à gauche. Je suis donc revenu, et me voici de nouveau devant le point où je vais prendre à droite cette fois-ci. Sur la route, juste devant moi, il y a une longue fissure qui divise la chaussée au centre, et, sur sa gauche, une fissure perpendiculaire qui occupe la moitié du chemin. L’image que vous voyez est celle d’une image-clé. Je peux parfaitement couper ici et j’obtiens un fichier vidéo qui commencera exactement là à la lecture. Donc jusqu’ici, pas de problème.
Mais qu’en est-il de l’autre point, celui du début du bout que je désire couper ? Là, ça se corse. Voici ce point.

On remarque deux différences notables : il fait sombre, parce que la première fois que je suis passé un nuage cachait le soleil ; et la première fois j’ai roulé plus à gauche sur la chaussée. Pour ces deux problèmes, il n’y a rien à faire, il va falloir vivre avec. Même chose si une voiture ou un piéton s’était trouvé devant moi au premier passage et avait disparu au deuxième. Ça fait partie des facteurs incontrôlables.
Quoi qu’il en soit, il faudrait que j’aie beaucoup de chance pour que l’image-clé de ce premier passage tombe exactement au même endroit que celle du deuxième passage. Il y a un risque de décalage d’une seconde, et une coupure d’une seconde, sur une vidéo de cyclisme, ça se voit. Même avec un cycliste lent.
La solution
D’ordinaire, quand on découpe sans ré-encodage, on indique le point de début de la coupure (une image-clé) puis le point de fin (encore une image-clé), et on peut dire adieu à la fluidité de la transition… le cycliste fait un petit voyage dans l’espace-temps qui dépend de la position des images-clés.
Mais à bien y penser, le problème disparaît si on inverse tout simplement la procédure ; si, au lieu de spécifier d’abord le point de début de la coupure, on commence par le point de fin. Qu’est-ce à dire ?
Faisons un essai. Je vais d’abord me déplacer à l’endroit où je veux terminer la découpe, et choisir l’image-clé la plus proche de l’endroit où je veux découper (concrètement, c’est la première capture d’écran que j’ai mise ci-haut). Kinodioraptor va alors mettre ce bout (de la position de fin de coupure à la fin de la vidéo) dans un fichier temporaire et le garder en réserve pour la concaténation, quand il collera le bout qui suit la coupure au bout qui la précède.
Ceci fait, je recule jusqu’à l’endroit où, sur la vidéo, je suis passé tout droit la première fois, et ce coup-ci je n’ai pas à choisir une image-clé, parce que je peux dire à ffmeg de couper de là jusqu’au tout début du fichier (jusqu’à 00:00:00). J’ai donc une précision trente fois supérieure à celle qu’offre une concaténation ordinaire sans ré-encodage, parce que je peux choisir entre trente images.
Il faut comprendre que quand on demande à ffmpeg de couper jusqu’au tout début d’un fichier (en vue d’utiliser ce bout coupé par la suite), il peut le faire à partir de n’importe quelle image. Mais si on lui demande de couper (pour réutilisation) jusqu’à la fin du fichier à partir d’autre chose qu’une image-clé, il va fort probablement produire un fichier corrompu.
C’est cette logique qui explique que, dans Kinodioraptor, on enlève les bouts inutiles en commençant par la fin.
J’ai fait de nombreux tests en évitant volontairement les images-clés pour le début de la découpe, et jusqu’ici je n’ai obtenu aucun fichier corrompu. Mais comme les gens roulent sur leur vélo d’appartement en regardant ces vidéos sur Kinomap, autant ne pas prendre de risque… J’ai donc installé une commande qui vérifie l’intégrité de la vidéo produite. Cette vérification est très rapide, car elle s’applique uniquement aux points de concaténation. Comme ça, pas besoin de revisionner toute la vidéo après la concaténation.

Ça c’est moi à la gare de Tsuchiura, il y a deux semaines, avant le départ pour aller filmer.

C’est encore moi, le même jour, pendant que mon bipède mangeait son sandwich à l’ombre des arbres en se plaignant de la chaleur (34 °C, au moins 60 % d’humidité).

Toujours moi, avec le GPS, la GoPro, le vieux téléphone cassé pour afficher la carte du tracé sur OsmAnd, et une batterie pour alimenter tout ça. Au besoin, la lampe qui sert de support au téléphone peut aussi servir de batterie pour l’alimenter. Le fil qui sort de la GoPro et passe devant l’écran du téléphone est une erreur typique de mon bipède, qui réfléchit toujours après-coup. Je lui ai fait corriger ça dans la balade suivante.

Et finalement ça c’est un sanglier, à quelques km de la maison. Il ne devait pas aimer le rouge, parce qu’il soufflait du museau et faisait signe de charger. Heureusement pour moi mon bipède m’entretient très mal et je fais des bruits de cliquetis d’un peu partout… ça l’a fait paniquer et il a pris la fuite comme s’il avait aperçu Obélix.
L’éditeur GPX : petite amélioration
J’ai ajouté à l’éditeur GPX des gros points orange qui identifient les endroits du tracé où le cycliste s’est arrêté. Extrêmement pratique au moment de l’édition de la vidéo…

(À suivre…)
Billet n° 189
Notez le n° de billet qui figure ci-dessus. Le formulaire s'ouvrira dans une nouvelle fenêtre.