Si vous avez une action cam, ou caméra d’action dans la langue de Molière (ou encore kaméra daxion dans celle de Jul), il est préférable de stabiliser vos vidéos avant de les diffuser, et ce pour le plus grand bien visuel de vos admirateurs et autres followers. Je vous propose ici une méthode simple pour faire ça sous Linux grâce à FFMpeg.
Table des matières
Exemple
Comme un exemple vaut mieux qu’un long discours, voici une vidéo de démonstration faite par Georg Martius, l’auteur de la librairie vid.stab, que nous allons utiliser ici :
Installation
Pour ce faire, il nous sera nécessaire d’utiliser FFmpeg avec la librairie libvidstab. Par défaut, celle-ci n’est pas fournie avec le fichier binaire de FFmpeg (version compilée). Deux options s’offrent donc à nous : compiler sois-même FFmpeg ou télécharger une version « alternative » du binaire incluant ladite librairie.
Par simplicité, c’est la seconde que je vais détailler ici. Nous allons donc utiliser une version dite Static Build de FFmpeg.
Téléchargez la Static Build
Rendez-vous à l’adresse suivante pour télécharger la dernière version de FFmpeg en Static Build, suivant votre configuration : https ://www.johnvansickle.com/ffmpeg/
Dans mon cas (architecture 64 bit et à la date où j’écris ces lignes), mon choix se porte donc vers le fichier « ffmpeg-git-amd64-static.tar.xz »
Installez la Static Build
Pour éviter tout conflit entre la Static Build et une potentielle version actuelle de FFmpeg, on va installer la Static Build dans un répertoire spécifique. Si vraiment vous êtes à 150 Mo près sur votre disque, vous pouvez toujours désinstaller FFmpeg avant de continuer.
Une fois l’archive téléchargée, ouvrez une terminal dans le dossier où elle est enregistrée et exécutez les commandes suivantes (adaptez les chemins en fonction du fichier que vous avez téléchargé) :
tar xf ffmpeg-git-amd64-static.tar.xz cd ffmpeg-git-20190223-amd64-static |
Créez un dossier de destination à la racine et copiez-y la version de FFfmpeg incluant la libvidstab :
sudo mkdir /usr/local/bin/ffmpeg-stab sudo mv * /usr/local/bin/ffmpeg-stab/ |
Créez un alias
Histoire de pouvoir exécuter exécuter la Static Build de FFmpeg depuis n’importe où, on va créer un alias vers le binaire correspondant :
alias ffmpegstab="/usr/local/bin/ffmpeg-stab/ffmpeg" |
Utilisation
Enfin on peut bosser !
La stabilisation se fait en deux passes :
- la première sert à corréler les différentes images de la vidéo (i.e. reconnaître des points particuliers dans les images et déterminer leurs trajectoires), et ce pour générer un fichier texte qui décrit ces trajectoires,
- la seconde va utiliser ce fichier texte pour appliquer les corrections au fichier vidéo et ainsi générer un nouveau fichier stabilisé.
Première passe
On utilise ici le filtre vidstabdetect
ffmpegstab -i VideoSecouée.mp4 -vf vidstabdetect -f null - |
Lors de cette première passe, les résultats de corrélations seront enregistrés dans le fichier transforms.trf
Seconde passe
Maintenant, il ne reste plus qu’à faire la deuxième passe avec le filtre vidstabtransform :
ffmpegstab -i VideoSecouée.mp4 -vf vidstabtransform=input="transforms.trf" VideoStabilisée.mp4 |
Et voilà !
Pour aller plus loin
On a utilisé ici les options par défaut des filtres vidstabdetect et vidstabtransform. Pour tweaker un peu tout ça, il est notamment possible de jouer sur le degré de tremblement (shakiness), entre 1 et 10 (5 par défaut) et sur le nombre d’images à utiliser pour « lisser » les trajectoires (smoothing), à 10 par défaut.
Exemple pour un shakiness à 7 (lors de la première passe) :
ffmpegstab -i VideoSecouée.mp4 -vf vidstabdetect=shakiness=7 -f null - |
et pour un smoothing à 15 (lors de la deuxième passe) :
ffmpegstab -i VideoSecouée.mp4 -vf vidstabtransform=input="transforms.trf":smoothing=15 VideoStabilisée.mp4 |
Il existe tout un tas d’autres options (par exemple pour rezoomer la vidéo, définir comment gérer les éventuels bords noirs etc.). Pour cela, je vous invite à consulter la doc de ces filtres.