Remplacer l’arrière plan d’une visio par un fond virtuel (a.k.a. Chroma-Keying)

Pourquoi vouloir remplacer ce qu’il se passe derrière moi en visio par un fond virtuel ?
Je travaille depuis chez moi et je n’ai pas le luxe d’avoir une pièce dédiée à mon activité. Quand il s’agit de discuter en visio avec des amis ou de la famille, je n’ai aucun souci avec le fait de leur faire profiter de mon cadre de travail : ma chambre. Par contre, quand il s’agit de discuter avec un prospect (Cadrage, Appel d’offre), ou un futur client (entretien de mission) ou des collègues moins proches, je n’aime pas l’idée que ces derniers « entrent dans mon intimité ».

J’ai donc tenté de remplacer mon environnement de travail réel par un arrière plan virtuel, échangeable à souhait pour correspondre au cadre de mes visioconférences. La seule contrainte que j’ai, et pas des moindres : Je ne dispose pas de fond vert !

Commençons simple

Il existe bien des outils comme ChromaCam, Snap Camera ou encore XSplit VCam qui ont l’air de très bien faire le job en détourant la silhouette du premier plan pour la recoller sur un fond virtuel. Même s’ils ont l’air très prometteurs, tous sont malheureusement incompatibles Linux. 😢😢

Il existe d’autres outils compatibles avec Linux pour faire ça en très peu de temps comme Virtual backgrounds for Google Meet, une Extension Chrome ou Linux-Fake-Background-Webcam, une image docker qui fait ça tout seul comme un grand avec quasi-zéro configuration (article expliquant son fonctionnement). Mais le résultat est très vite décevant et loin d’un rendu utilisable dans un milieu pro. La preuve en images :

Virtual backgrounds for Google Meet
Virtual backgrounds for Google Meet
Linux-Fake-Background-Webcam
Linux-Fake-Background-Webcam

Certains autres outils, bien plus connus, comme Zoom et Microsoft Teams, ont cette fonctionnalité (assez demandée) déjà intégrée. Malheureusement, je n’utilise aucun de ces outils et il ne sont, à ma connaissance, pas interconnectables avec d’autres outils de visioconférence.

Il semblerait même que cette fonctionnalité de « Virtual Background » faisait partie de Google Meet (enfin, son prédécesseur Google Talk) mais que Google ait décidé de la virer pour je ne sais quelle bonne raison.

Il va falloir trouver autre chose qui soit compatible Ubuntu 18.04 et qui puisse s’utiliser avec tous les outils de visioconférence que je pourrais utiliser (à minima Google Meet).

On se retrousse les manches

J’entends assez vite parler de Open Broadcaster Software (OBS), notamment par quelques collègues ainsi que par le youtuber EposVox (et son OBS Studio Master Class).

Allez, on installe :

$ sudo apt install obs-studio

On lance :

$ obs

Wouah, easy !!! On crée une scène, on y ajoute la source « webcam » et on tente l’enregistrement. Ah ben en faite non !

"Failed to open NVENC codec: Unknown error occurred"

Pour régler ce problème, il faut passer dans le mode d’enregistrement logiciel au lieu de matériel. Cela est dû au fait que j’ai désactivé, il y a quelques temps, mon GPU sur ce laptop pour gagner en autonomie.
OBS ⇒ Paramètres ⇒ Sortie ⇒ Enregistrement ⇒ Encodeur ⇒ Choisir « Logiciel (x264) » au lieu de « Matériel (NVENC) ».

On retente l’enregistrement ? Voilà qui est mieux ! Ça fonctionne !

Bon OK, j’aimerai maintenant récupérer ce flux vidéo pour l’utiliser avec n’importe quel outil qui aurait besoin de ma webcam, genre Google Meet.

Streaming vers Google Meet

Je tente innocemment le streaming en me disant que je vais très certainement avoir une option pour mettre l’url du Google Meet. Ah ah ah ! La bonne blague ! Il y a plus de 60 services de streaming mais aucune trace de Hangout ou Google Meet 🤨🤔

En explorant Linux-Fake-Background-Webcam j’ai cru comprendre qu’on pouvait utiliser le flux vidéo d’une source pour la diffuser dans une autre source virtuelle grâce à v4l2loopback. Let’s Go !!

Installation :

$ sudo apt install v4l2loopback-dkms

Création d’une webcam virtuelle :

$ sudo modprobe v4l2loopback devices=1 video_nr=10 card_label="Virtual Cam" exclusive_caps=1

J’ai donc maintenant 2 webcams : ma vraie webcam (/dev/video0) et ma webcam virtuelle (/dev/video10).

Très bien, maintenant je dois réussir à traiter le flux vidéo de ma webcam avec OBS et diffuser ça dans la webcam virtuelle, ainsi je pourrais demander à Google Meet (ou tout autre service) d’utiliser la webcam virtuelle.
Hmmmmm… OK !
Heuuuu… Comment quoi qu’est-ce possible ? 🤔

Au détour de toutes mes recherches, je suis tombé sur ce plugin de CatxFish : obs-virtual-cam. Il permet de diffuser le flux vidéo résultant de OBS sur la webcam virtuelle de notre choix. Et… Et… Il  n’est, bien évidemment, disponible que pour Windows 😱😱😱. Heureusement, ce même CatxFish (mon nouveau meilleur ami) a aussi créé obs-v4l2sink qui fait exactement la même chose que obs-virtual-cam mais sur Linux et sur base de v4l2loopback !!!

Je suis sauvé ! Il suffit de suivre le manuel d’installation ! Enfin presque… puisqu’il faut au préalable installer le package libobs-dev ainsi que libobs0 (qui est une dépendance de libobs-dev) :

$ sudo apt install libobs0 libobs-dev

Et maintenant l’installation de obs-v4l2sink :

$ sudo apt install qtbase5-dev
$ git clone --recursive https://github.com/obsproject/obs-studio.git
$ git clone https://github.com/CatxFish/obs-v4l2sink.git
$ cd obs-v4l2sink
$ mkdir build && cd build
$ cmake -DLIBOBS_INCLUDE_DIR="../../obs-studio/libobs" -DCMAKE_INSTALL_PREFIX=/usr ..
$ make -j4
$ sudo make install

Je suis maintenant capable de rediriger le flux vidéo de OBS vers la webcam virtuelle et donc de l’utiliser avec Google Meet.
OBS Studio ⇒ Outils ⇒ V4L2 Video Output ⇒ Start !
Et ça fonctionnera avec n’importe quel outil, que ce soit Teams, Zoom, Discord ou que sais-je encore ?

Bien ! J’ai fait la moitié du travail, il me reste à faire la partie remplacement de l’arrière plan pour atteindre mon objectif.

Remplacer l’arrière plan par un fond virtuel

C’est là que ça devient coton !

Toutes les solutions pseudo magiques ont donné un résultat vraiment pas terrible qui ne mérite pas d’être utilisé parce que pire que mieux. Même Zoom qui propose cette fonctionnalité a besoin de conditions bien particulière comme « Un arrière plan de couleur unie est requis. De couleur vert de préférence. » Grrrr !!

zoom
Zoom

En fait, même si OBS propose une foultitude de filtres hautement configurables permettant de l’incrustation (par Chrominance, par Luminosité, par Couleur), il ne peut pas faire de miracle ! À moins, peut-être, d’utiliser une dizaine de filtres, mais je pense que ma machine tousserait bien avant d’avoir un résultat correct.

obs
OBS au mieux de ce que j’ai pu faire.

J’ai comme l’impression que j’ai fait tout ça pour rien 😭😭😭😭. Enfin, pas exactement « pour rien » puisque ça m’a permis de vous écrire ce petit billet.

Je me tâte maintenant à investir un peu dans un fond vert (Chroma-Key) pour finaliser cette installation. Mais je crains qu’une fois acquis je ne réalise que ce n’est pas suffisant et me pousse à investir aussi dans de l’éclairage et ensuite une bonne caméra et pourquoi pas aussi dans un bon micro. Bref, ce serait l’escalade et je n’ai clairement pas la place pour monter tout un studio de tournage juste pour masquer mon arrière plan pendant les quelques visioconférence que je vais faire.

Conclusion

Bon bé, on peut dire que c’est un epic fail. Les logiciels ne sont qu’une partie (sûrement de loin la plus facile à résoudre) de l’équation. Il faut bien plus qu’une caméra, un fond vert et un logiciel pour avoir un résultat un peu quali. Et il est facile de s’en convaincre en regardant cette vidéo :

S’équiper pour faire du montage vidéo, comme une incrustation par chrominance, nécessite du matériel dans lequel je ne suis pas prés à investir. Il faudrait que ce soit une bonne partie de mon activité pour sauter le pas. Donc, sans matériel adéquat, j’ai bien peur que tous mes efforts restent vains.

Peut-être un jour tomberais-je sur une technique (logicielle) révolutionnaire permettant vraiment l’incrustation sans fond vert. Mais en attendant, je vais me contenter de prendre soin de ne pas faire une visio avec vu sur mon lit.

Pour aller plus loin

Si vous souhaitez sauter le pas de votre côté, au grès de mes pérégrinations, j’ai trouvé deux systèmes ingénieux de fond vert :

1. Celui de Sébastien Blanc (le Elgato Green Screen Rétractable) me semble plutôt bien. Il se déploie et se replie en 5 secondes, la toile est toujours tendue et sans plis, à peine plus encombrant qu’un kakemono, il est disponible pour un prix allant de 139€ à 200€ selon les stores partenaires de Elgato.

2. Ainsi que cette alternative que je trouve séduisante mais qui me semble un poil coûteuse (~120€) pour ce que c’est : un fond vert pour siège !

webaround

Voilà, j’en ai fini. Alors comme d’habitude, n’hésitez pas si vous avez des questions, des remarques ou des injures, je vous répondrez avec grand plaisir.

Une réflexion sur “Remplacer l’arrière plan d’une visio par un fond virtuel (a.k.a. Chroma-Keying)

Votre commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l’aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google

Vous commentez à l’aide de votre compte Google. Déconnexion /  Changer )

Image Twitter

Vous commentez à l’aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l’aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s