Suppression de fond vert avec FFmpeg : chroma key en vidéo
Utiliser, puis supprimer, un fond vert peut être un processus fastidieux. Cependant, si les conditions sont favorables, un peu d’automatisation peut faire gagner beaucoup de temps. Bien sûr, chez Transloadit, nous adorons automatiser les petits détails : voyons donc comment utiliser FFmpeg et Transloadit pour détourer automatiquement par chroma key le fond vert d’une vidéo, qui se retrouve ainsi avec un arrière-plan transparent.
La méthode la plus rapide pour supprimer un fond vert avec FFmpeg utilise le filtre colorkey pour rendre
transparente une teinte choisie, puis encode le résultat dans un format qui prend en charge un canal
alpha. Un bon éclairage et un fond de couleur uniforme comptent autant que la commande elle-même.

Comment fonctionne un fond vert ?
Avant de pouvoir supprimer un fond vert, nous devons comprendre ce qu’est vraiment un fond vert. Un fond vert est placé derrière un sujet afin de créer un arrière-plan uniforme, plus facile à supprimer. En général, la couleur choisie est un vert fluo, car c’est la plus éloignée des tons de peau, mais le bleu est également couramment utilisé.
Lorsque vous voulez supprimer l’arrière-plan, vous devez utiliser une incrustation chroma key pour retirer sélectivement la couleur verte de chaque image de la vidéo, ce qui laisse un arrière-plan transparent derrière votre sujet.
Commande FFmpeg
Avant d’entrer dans le détail de nos Assembly Instructions, ouvrons le capot pour voir ce qui se cache dessous 🔎
Transloadit utilise un ensemble d’outils en ligne de commande pour effectuer des opérations de transcodage sur vos fichiers. L’un de ces outils est le très réputé FFmpeg, que nous utilisons dans bon nombre de nos Robots pour le transcodage vidéo, audio et image.
Avant de rédiger notre Template, nous pouvons d’abord tester l’opération en local avec une commande FFmpeg. Ensuite, nous convertissons cette commande FFmpeg en un ensemble d’Assembly Instructions, ce qui nous permet de profiter de la commodité et de la rapidité qu’offre Transloadit.
Pour supprimer le fond vert d’une vidéo, la commande est la suivante :
ffmpeg -i input.mp4 -vf 'colorkey=0x00FF00:similarity=0.2:blend=0.3' -c:v libvpx-vp9 -pix_fmt yuva420p -c:a libopus output.webm
Décortiquons-la.
Tout d’abord, nous utilisons l’option i pour indiquer notre fichier d’entrée. Ensuite, nous pouvons passer une série de filtres vidéo à l’option vf. Dans notre cas, nous n’avons besoin que du filtre colorkey, en définissant la couleur de clé sur 0x00FF00.
Nous pouvons ensuite ajuster colorkey à l’aide des paramètres similarity et blend. Ceux-ci indiquent à quel
point une couleur doit être proche de la couleur de clé pour devenir transparente, ainsi que la
dureté de la clé. N’hésitez pas à expérimenter avec leurs valeurs pour voir comment le résultat
évolue.
Ensuite, c:v sélectionne l’encodeur VP9 et pix_fmt demande un format de pixel avec canal alpha.
L’audio est encodé en Opus. Pour en savoir plus sur VP9 et d’autres codecs, consultez notre article
de blog sur la compression vidéo (English).
Enfin, l’extension de sortie .webm sélectionne le format WebM, car ce format prend en charge la
transparence vidéo.
Le Template
Maintenant que nous avons vu la commande sous-jacente, voyons à quoi elle ressemble dans notre Template.
{
"steps": {
":original": {
"robot": "/upload/handle"
},
"remove_green_screen": {
"use": ":original",
"robot": "/video/encode",
"result": true,
"ffmpeg_stack": "v7",
"preset": "empty",
"ffmpeg": {
"vf": "colorkey=0x00FF00:similarity=0.2:blend=0.3",
"c:v": "libvpx-vp9",
"pix_fmt": "yuva420p",
"c:a": "libopus",
"f": "webm"
}
},
"exported": {
"use": ["remove_green_screen", ":original"],
"robot": "/s3/store",
"credentials": "demo_s3_credentials",
"url_prefix": "https://demos.transloadit.com/"
}
}
}
Remarquez que, dans le paramètre ffmpeg, nous pouvons indiquer exactement les mêmes options que dans la
commande d’origine, ce qui nous permet de manipuler le fichier de la même manière tout en profitant
des fonctionnalités supplémentaires qu’offre Transloadit.
Un détail important à noter : nous utilisons le préréglage empty afin de garantir qu’aucun autre
encodage n’est appliqué au fichier en dehors de ce que nous avons spécifié. Consultez notre
page des préréglages pour connaître le détail de
ce qu’offre chaque préréglage.
Résultats finaux
Voici le résultat de notre Template, en lui passant une vidéo d’un dinosaure devant un fond vert vif.
Plutôt réussi ! En plus, tout cela s’est déroulé automatiquement, ce qui nous permet de traiter facilement des centaines de fichiers et d’exporter nos résultats vers un bucket de stockage pour les récupérer plus tard.
C’est tout pour cet article ! Nous espérons qu’il vous a permis de jeter un œil en coulisses sur l’utilisation de FFmpeg dans vos Templates. Pour suivre nos prochains articles et découvrir des articles que nos développeurs trouvent intéressants, pourquoi ne pas vous inscrire à notre newsletter ci-dessous ?
