Utiliser FFmpeg avec CoolTweak


A propos de l'article

Ce tutoriel technique s'adresse aux développeurs qui désirent étendre les possibilités de CoolTweak en utilisant la librarie FFmpeg.

Nous allons voir au travers d'une série d'exemples très concrets comment traiter des vidéos depuis CoolTweak.

Si vous n'êtes pas encore familiarisé avec les commandes personnalisées, il est recommandé de lire leur documentation.

Il est aussi conseillé de lire l'article sur l'utilisation d'ImageMagick qui explique quelques concepts supplémentaires.

A propos de FFmpeg

FFmpeg est une librairie de traitement de video populaire et utilisée dans de très nombreux logiciels dont la particularité est de pouvoir être appelée facilement en ligne de commande.
Ce mode de fonctionnement est donc idéal pour pouvoir l'intégrer dans CoolTweak car il suffit de référencer le fichier exécutable et de lui transmettre des paramètres.

Allez sur le site officiel de FFmpeg pour en savoir plus et rendez vous sur le site zeranoe pour télécharger simplement la distribution de FFMpeg la plus adaptée à vos besoins.

Par défaut, choisissez la dernière version de Release Static dans l'architecture de votre système, il n'est pas nécessaire de l'installer, dézippez le dossier où vous le voulez.
Dans nos exemples, il sera déposé dans C:\FFmpeg et l'éxécutable principal sera donc C:\FFmpeg\ffmpeg.exe.

Création d'une commande FFmpeg

Dans tous les exemples qui vont suivre, nous allons nous baser sur une configuration commune de la commande personnalisée, seuls les paramètres d'appel seront différents en fonction de l'action a réaliser.

Voici donc la configuration de base de notre commande personnalisée:
  • Type de commande: Fichier éxécutable
  • Chemin du script: C:\FFmpeg\ffmpeg.exe
  • Cocher l'option: Attendre la fin de la commande avant de continuer
  • Sélectionner l'option: A la fin du traitement, Ne pas recharger le fichier

Ici, comme nous ne réalisons qu'une seule action sur le fichier, il est inutile de faire recharger le fichier traité par CoolTweak.

Comme vous avez pu vous en rendre compte, aucun paramètres d'appel n'est encore défini pour l'instant, nous allons les fixer dans les exemples suivants.

Ignorer la sortie d'erreur

Par défaut FFmpeg écrit ses messages de log dans la sortie standard d'erreur, vous avez donc 2 solutions:

  • Décocher l'option: "Echouer en cas d'ecriture dans la sortie d'erreur (stderr)" pour que CoolTweak ne prenne pas en compte les messages.
  • Laisser cochée l'option mais ajouter à toutes les commandes les paramètres d'appel "-loglevel panic -hide_banner" qui réduisent le verbosité aux erreurs graves uniquement.

Sauver le fichier traité

Avec les réglages par défaut, la vidéo traitée sera placée dans un dossier "Cooltweak" et elle aura le même nom que la vidéo originale.

Nous pouvons rester dans ce mode mais nous pouvons également choisir de piloter manuellement la sauvegarde du fichier traité et sélectionnant l'option "Ne pas sauver les fichiers traités" du menu "Déplacer et renommer" de l'onglet "Options de sortie".

Dans ce cas, CoolTweak ne va plus prendre en charge la sauvegarde des fichiers traités, c'est à nous de définir l'endroit où sera sauvé le fichier traité lors de l'appel de la commande.
Pour illustrer cette possibilité, on optera pour placer le fichier traité dans son dossier original avec un nouveau nom dans les exemples suivants.

Exemples concrets d'intégration de FFmpeg

FFmpeg permet de réaliser de nombreuses opérations sur les vidéos, voici un aperçu de ses possibilités et de comment les intégrer dans CoolTweak.

Convertir une vidéo en MP4

La syntaxe originale d'FFmpeg est du type:
ffmpeg.exe -i video.wmv -c:v libx264 -preset ultrafast newvideo.mp4

Paramètres d'appel:
-i "{FilePath}" -c:v libx264 -preset ultrafast "{OriginalFileDirectoryPath}{OriginalFileNameWithoutExtension}.mp4"

Ces paramètres demandent à FFmpeg de convertir le fichier temporaire courant en mp4 et de le placer dans le dossier orginal, avec le nom du fichier original mais avec l'extension .mp4

Pivoter une vidéo de 90 degrés

La syntaxe originale d'FFmpeg est du type:
ffmpeg.exe -i video.mp4 -filter:v 'transpose=1' newvideo.mp4 (et 'transpose=2' pour 90 degrés dans le sens antihoraire)

Paramètres d'appel:
-i "{FilePath}" -vf 'transpose=1' -c:a copy "{OriginalFileDirectoryPath}{OriginalFileNameWithoutExtension}-rotation{OriginalFileNameExtension}"

Ces paramètres demandent à FFmpeg de pivoter le fichier temporaire de 90 degrés (sens horaire) puis de le placer dans le dossier orginal, avec le nom du fichier original muni du suffixe -rotation.

Redimensionner une vidéo

La syntaxe originale d'FFmpeg est du type:
ffmpeg.exe -i video.mp4 -s 480x320 -c:a copy newvideo.mp4 (vers du 320p)

Paramètres d'appel:
-i "{FilePath}" -s 480x320 -c:a copy "{OriginalFileDirectoryPath}{OriginalFileNameWithoutExtension}-320p{OriginalFileNameExtension}"

Ces paramètres demandent à FFmpeg de redimensionner le fichier temporaire en 480x320px puis de le placer dans le dossier orginal, avec le nom du fichier original muni du suffixe -320p.

Extraire le son d'une vidéo en mp3

La syntaxe originale d'FFmpeg est du type:
ffmpeg.exe -i video.mp4 audio.mp3

Paramètres d'appel:
-i "{FilePath}" "{OriginalFileDirectoryPath}{OriginalFileNameWithoutExtension}.mp3"

Ces paramètres demandent à FFmpeg d'extraire la piste audio du fichier temporaire puis de la placer dans le dossier orginal, avec le nom du fichier original avec l'extension mp3.

Image d'une vidéo à un temps donné

La syntaxe originale d'FFmpeg est du type:
ffmpeg.exe -ss 00:00:15 -i video.mp4 -vf scale=800:-1 -vframes 1 image.jpg (ici une image de largeur 800px à 15s)

Paramètres d'appel:
-i "{FilePath}" -ss 00:00:15 -vf scale=800:-1 -vframes 1 "{OriginalFileDirectoryPath}{OriginalFileNameWithoutExtension}.jpg"

Ces paramètres demandent à FFmpeg d'extraire l'image de 800px de large du fichier temporaire à la 15ème seconde et de la placer dans le dossier orginal, avec le nom du fichier original et l'extension jpeg.

Images d'une vidéo à interval régulier

La syntaxe originale d'FFmpeg est du type:
ffmpeg.exe -i video.mp4 -vf fps=1/5 frame_%04d.jpg (une image extraite toutes les 5s)

Paramètres d'appel:
-i "{FilePath}" -vf fps=1/5 "{OriginalFileDirectoryPath}{OriginalFileNameWithoutExtension}_%04d.jpg"

Ces paramètres demandent à FFmpeg d'extraire une image du fichier temporaire toutes les 5 secondes et de les placer dans le dossier orginal, avec le nom du fichier original avec un numéro incrémenté sur 4 chiffres.

Convertir la vidéo en gif animé

La syntaxe originale d'FFmpeg est du type:
ffmpeg.exe -i video.mp4 -vf scale=500:-1 -t 10 -r 10 image.gif (gif de 500px de largeur avec une image toutes les 10s)

Paramètres d'appel:
-i "{FilePath}" -vf scale=500:-1 -t 10 -r 10 "{OriginalFileDirectoryPath}{OriginalFileNameWithoutExtension}.gif"

Ces paramètres demandent à FFmpeg de créer un gif animé à partir du fichier temporaire et de les placer dans le dossier orginal, avec le nom du fichier original et l'extension gif.

FFmpeg avec une commande d'événement

Pour finir, nous allons voir comment appeler FFmpeg sur l'ensemble des fichiers d'entrée pour créer un diaporama vidéo à partir des images transmises.
Cela nous permettra d'illustrer que l'intégration de FFmpeg est aussi possible et facile avec les commandes d'événements.

Dans cet exemple, nous postulons qu'il existe sur le disque un dossier C:\images avec un ensemble de photos numérotées de photo1.jpg à photo5.jpg.

La syntaxe originale d'FFmpeg est du type:
ffmpeg.exe -r 1/5 -i img%03d.png -c:v libx264 -r 30 -pix_fmt yuv420p slideshow.mp4

Paramètres d'appel:
-r 1/5 -i "{FileDirectoryPathes}photo%01d.jpg" -c:v libx264 -r 30 -pix_fmt yuv420p "{FileDirectoryPathes}diaporama.mp4"

Nous faisons ici usage de la variable {FileDirectoryPathes} qui contient le chemin du dossier parent de tous les fichiers à traiter, dans notre cas elle possède donc la valeur de C:\images car tous les fichiers sont dans le même répertoire.

Nous demandons ensuite à FFmpeg de combiner les images dans leur ordre alphabétique pour fabriquer un diaporama vidéo qui sera sauvé dans le même dossier avec l'extension .mp4

Et maintenant ?

Maintenant, vos menus sont prêts à l'emploi, il suffit de sauver vos modifications (bouton en bas à droite de l'éditeur de menu) pour pouvoir l'utiliser depuis un simple clic droit sur vos fichiers et dossiers.

FFmpeg est une librarie très puissante, il y a vraiment beaucoup de possibilités à exploiter.
Si pendant vos expérimentations vous trouvez des fonctionnalités qui devraient selon vous être présentes nativement dans CoolTweak, n'hésitez pas à nous les soumettre car toutes vos suggestions sont toujours les bienvenues.

Bon codage !