====== Enregistrer depuis une webcam sous Debian GNU/Linux ======
Sources :
* [[https://doc.ubuntu-fr.org/webcam|Les webcams sous Ubuntu]]
* [[https://toptips.fr/les-7-meilleurs-outils-de-webcam-pour-les-utilisateurs-de-linux/|Les 7 meilleurs outils de webcam pour les utilisateurs de Linux]]
* [[https://wiki.debian.org/fr/Webcam|Webcams sur Debian]] (debian.org)
===== Cas d'utilisation =====
Je souhaite enregistrer les flux vidéo et audio fournis pas une webcam [[https://www.aukey.com/products/aukey-overview-full-hd-video-1080p-webcam|Aukey PC-LM1E]], sous Debian 11 KDE tournant sur un ordi équipé d'un processeur [[https://www.intel.fr/content/www/fr/fr/products/sku/134584/intel-core-i312100-processor-12m-cache-up-to-4-30-ghz/specifications.html|i3-12100]], sans autre processeur graphique que [[https://www.intel.fr/content/www/fr/fr/products/sku/134584/intel-core-i312100-processor-12m-cache-up-to-4-30-ghz/specifications.html#specs-1-0-4|l'UHD Intel® 730 intégré au processeur]].
Autant le dire tout de suite, dans mon cas, la solution à tous les problèmes s'est appelée //guvcview//.
# apt install guvcview
Suivi de :
$ guvcview
J'ai eu facilement accès à tous les réglages, pu faire tous tests souhaités afin de tirer le meilleur de ma webcam (en l’occurrence du 1080p à 30fps), tout en définissant le format et les paramètres d'enregistrement que le voulais. En 2 clics, j'ai pu choisir un autre micro que celui de la webcam. Le tout, avec des menus déroulant simples ou ne s'affichent que des valeurs applicables.
Ce programme a instantanément reconnu tous les périphériques connectés susceptibles de fournir de la vidéo((Pas de capture d'écran mais ce n'était pas le but.)) ou du son.
===== Mon choix =====
* En détection :
* //qv4l2// donne un accès immédiat aux caractéristiques de la première webcam et permet d'afficher le rendu à l'écran
* //gst-device-monitor-1.0// affiche les caractéristiques complètes dans une terminal. Au passage, il donne le nom de "device" (/dev/videoX) correspondant à vos webcams; pratique si on veut utiliser d'autres outils qui exigent cette info.
* En enregistrement :
* //guvcview// va droit au but, reconnaît tout et exploite au mieux les performances de la webcam.
* //OBS-studio// donne la même qualité mais est plus long à prendre en main et moins clair dans le choix des encodages de sortie de webcam. Ça vaut l'investissement si vous avez le temps car il sait faire bien plus…
* En vérification d'encodage du fichier obtenu : //ffprobe//
===== Détection vidéo =====
Dans mon cas d'utilisation, cette webcam s'est montrée //plug and play//, aussi bien sous Debian 10 qu'avec une installation (à partir de rien) de Debian 11. Elle était immédiatement utilisable pour des visios //Jitsi// à travers Firefox, son et image. C'est un moyen rapide de tester la détection et l'utilisabilité mais ça a été un peu plus compliqué lorsqu'il s'est agit d'enregistrer les flux.
==== Périphériques USB détectés ====
Pour avoir une chance d'être exploitable, la présence d'un périphérique USB doit avoir été détectée par le système.
$ lsusb
Affiche la liste des périphériques détectés, un clavier, une souris, une webcam, un micro autonome, un adrophone… Si la webcam ne figure pas dans la liste, inutile d'aller plus loin.
Dans mon cas, ma webcam est reconnue en tant que périphérique USB :
Bus 001 Device 008: ID 0c45:636d Microdia PC-LM1E
==== Quelques outils ====
=== En ligne ===
Ces outils fonctionnent sur le principe du test initial que j'ai réalisé via un serveur Jitsi et Firefox. Ils consistent à se connecter à un serveur et partager la caméra et le micro. La demande de partage affiche une liste de périphériques ce qui permet de voir le nom utilisé par le système pour désigner la webcam (par exemple : "PC-LM1E: PC-LM1E".
Il faut toutefois souligner que ces tests se font en local sur l'ordi((Ils s'exécutent à l'intérieur du navigateur, pas sur le serveur distant.)). Ça tombe bien puisqu'on veut effectuer un enregistrement en local et non avoir une conversion en viso ;-)
== webcamtests.com ==
[[https://webcamtests.com/|Webcam Test]] permet de tester le signal vidéo. Il affiche un retour image, procède à une série de tests (plusieurs secondes) dont il affiche les résultats complets. Le mode "full screen" permet d'apprécier la qualité de l'image.
Dans mon cas d'utilisation, il signale que la caméra n'a pas de microphone intégré alors qu'elle dispose d'un micro stéréo.
[[https://mictests.com/|Mic Test]] permet de tester le signal audio. Il s'est avérée incapable de détecter le micro de la webcam ainsi que d'autres sources audio : l'audio interne de l'ordi ou le micro raccordé en face avant((Le changement de périphérique par défaut dans //pavucontrol// n'y change rien.)). Il a miraculeusement reconnu un autre micro USB à partir duquel j'ai pu poursuivre le test.
Il affiche une vue temporelle spectrale du signal et procède à une série de tests dont il affiche les résultats. Durant les tests, il procède à un enregistrement que l'on pourra lire, une fois les tests terminés. Cela permet de constater auditivement la qualité du signal.
Pas de panique, l'outil suivant a fonctionné ;-)
== onlinemictest.com ==
[[https://www.onlinemictest.com/webcam-test|Webcam Test]] permet de tester le signal vidéo. Il affiche le nombre d'images par secondes mais pas la résolution.
[[https://www.onlinemictest.com/|Microphone Test]] permet de tester le signal audio. Présente le résultat sous forme signal de type oscilloscope. C'est rudimentaire mais efficace. Cela permet de vérifier la détection ou non du micro (en tout ou rien). On a également une idée du bruit de fond ((Qui peut être réellement présent dans la pièce, non-filtré par le micro, généré par l'électronique du micro ou de l'ordi, ou généré numériquement par le pilote (driver) utilisé par le système.)).
=== Interface graphique ===
== qv4l2 ==
//qv4l2// est vraiment très informatif pour peu que la webcam soit prise en charge par v4l2((vidéo for linux.))
On retrouve le même type d'interface que pour la configuration de l'excellent //guvcview// mentionné d'entrée de jeu.
On choisit le format, la taille et il calcule la vitesse d'affichage. On peut lancer un rendu à l'écran de ce que ça donne. Dans mon cas, il a reconnu les 2 flux. En choisissant le flux mjpeg, j'arrivais logiquement à 30 fps en 1920x1080.
Il affiche directement les caractéristiques de la première webcam détectée. On peut en choisir une autre : File > Open device, puis naviguer vers /dev et choisir le nom du "device" (qu'indique //gst-device-monitor-1.0// ;-) ).
=== En ligne de commande ===
== Formats du signal et résolutions ==
//gst-device-monitor-1.0// est un outil simple et efficace qui détecte les webcam reconnue par gstreamer (v4l ou pas). L'affichage des résultat est d'une très grande clarté.
Dans mon cas il a reconnu ma webcam récente et ma webcam antique, ainsi que tous les formats et encodages fournis par ces deux webcam.
Pour l'installer :
# apt install gst-device-monitor-1.0
Pour l'utiliser, aucun paramètre n'est nécessaire :
$ gst-device-monitor-1.0
Goûter les résultats :-) Dans mon cas, je retrouve les promesses du fabricant :-D
Ça se complique car il faut connaître le nom interne donné par le système à la caméra. En effet, ce nom c'est pas celui qui est proposé dans la liste déroulent de Firefox. Heureusement, dans la plupart des cas, se nom sera "/dev/video0".
//ffmpeg// avec les bons paramètres affiche ces informations.
ffmpeg -list_formats all -i /dev/video0
Dans mon cas, cela affiche :
[video4linux2,v4l2 @ 0x560087413280] Compressed: mjpeg : Motion-JPEG : 1280x720 1920x1080 800x600 640x480 352x288 320x240
[video4linux2,v4l2 @ 0x560087413280] Raw : yuyv422 : YUYV 4:2:2 : 1920x1080 1280x720 800x600 640x480 352x288 320x240
Quasiment les mêmes résultats que //gst-device-monitor-1.0//, présentés autrement. Mais faut connaître les nom de "devices" pour avoir toutes les webcam.
//ffplay// permet d'avoir un rendu visuel du flux tout en affichant les caractérisques de ce qui est joué.
Dans mon cas, il récupère manifestement le second flux détecté par //ffmpeg//, non compressé et fatalement lentissime (à 5fps !) :
$ ffplay -fflags nobuffer -flags low_delay -framedrop -i /dev/video0
[…]
Stream #0:0: Video: rawvideo (YUY2 / 0x32595559), yuyv422, 1920x1080, 165888 kb/s, 5 fps, 5 tbr, 1000k tbn, 1000k tbc
//mpv// donne a peu près le même genre d'info. Dans mon cas, je retrouve les mêmes mauvais résultats puisqu'il reste, lui aussi, scotché sur le flux non compressé.
$ mpv --profile=low-latency --untimed /dev/video0
[…]
(+) Video --vid=1 (rawvideo 1920x1080 5.000fps)
[autoconvert] Converting yuyv422 -> yuv422p
VO: [gpu] 1920x1080 yuv422p
== Informations techniques ==
v4l2-ctl permet de récupérer des caractéristiques techniques de webcam.
ffmpeg -list_formats all -i /dev/video0
Dans mon cas, il a bien détecté la Aukey PC-LM1E mais pas ma vieille Logitech((Dont ffmpeg m'a appris qu'elle fournissait du mjpeg : [video4linux2,v4l2 @ 0x5599662c3280] Compressed: mjpeg : JFIF JPEG : 320x240 640x480 !)), pourtant proposée
via Firefox sur les outils en ligne… À titre d'exemple, voici les informations renvoyées dans mon cas :
$ v4l2-ctl -D
Driver Info:
Driver name : uvcvideo
Card type : PC-LM1E: PC-LM1E
Bus info : usb-0000:00:14.0-7.1
Driver version : 5.18.16
Capabilities : 0x84a00001
Video Capture
Metadata Capture
Streaming
Extended Pix Format
Device Capabilities
Device Caps : 0x04200001
Video Capture
Streaming
Extended Pix Format
==== Problèmes et pistes de solutions ====
=== Les applications choisissent le mauvais encodage ===
Dans mon cas, les applications privilégient le flux non compressé. Une piste est de créer un pseudo périphérique configuré comme le souhaite. C'est la solution suggérée dans un forum pour le régler le problème inverse((L'internaute veut accéder format non compressé alors que le système pousse le flux compressé…)) : [[https://stackoverflow.com/a/59574988|How to change mjpeg to yuyv422 from a webcam to a v4l2loopback?]]
=== L'état de l'audio n'est pas clair ===
Sous KDE, "Les paramètres de volume audio" donnent beaucoup d'information mais manquent de clarté.
Je préfère utiliser //pavucontrol// (Contrôle de volume PulseAudio). S'il n'est pas préinstallé :
# apt install pavucontrol.
===== Détection audio =====
Sources :
* [[https://unix.stackexchange.com/questions/587560/why-isnt-my-microphone-being-detected-by-settingssoundinput-on-debian-10|Why isn't my microphone being detected by Settings|Sound|Input on Debian 10?]]
== arecord ==
$ arecord -l
**** Liste des Périphériques Matériels CAPTURE ****
carte 0: PCH [HDA Intel PCH], périphérique 0: ALC897 Analog [ALC897 Analog]
Sous-périphériques: 1/1
Sous-périphérique #0: subdevice #0
carte 0: PCH [HDA Intel PCH], périphérique 2: ALC897 Alt Analog [ALC897 Alt Analog]
Sous-périphériques: 1/1
Sous-périphérique #0: subdevice #0
carte 1: Microphone [USB Condenser Microphone], périphérique 0: USB Audio [USB Audio]
Sous-périphériques: 1/1
Sous-périphérique #0: subdevice #0
carte 2: PCLM1E [PC-LM1E], périphérique 0: USB Audio [USB Audio]
Sous-périphériques: 1/1
Sous-périphérique #0: subdevice #0
== Liste claire des sources audio disponibles==
$ pacmd list-sources | grep -e 'index:' -e device.string -e 'name:'
Fournit la liste des sources et indique un manière de nommer les sources.
Dans mon cas, il signal que "iec958:2" identifie ma webcam en tant que source audio et indique qu'elle présente un profile "iec958-stereo" :
index: 1
name:
device.string = "iec958:2"
L' "*" indique le périphérique par défaut
== Activation et niveau sonore ==
Le périphérique audio et son flux peuvent être parfaitement reconnus mais ne rien produire.
//pavucontrol// permettra de résoudre la plupart des cas : source rendue muette, application n'utilisant le bon périphérique d'entrée… Dans certains cas, il faut aller plus en détail et accéder à des informations masquées par //pavucontrol//.
Si le système est configuré pour utiliser Alsa((Advancde Linux Sound Architecture.)), //alsamixer// donne une vue plus détaillée de la configuration des "cartes" son :
$ alsamixer
===== Enregistrement =====
==== guvcview ====
Comme annoncé au début de cette fiche, //guvcview// est l'application qui m'a donné les meilleurs résultats, le plus vite. Il s'installe facilement mais ne crée pas de lanceur d'application, du moins dans Debian-11-KDE.
==== OBS ====
Obs-Studio a été la première application testée à me donner un bon résultat. Certes, OBS est conçu pour faire bien plus qu'enregistrer une webcam ; je me suis quand même lancée. J'ai obtenu un enregistrement à la qualité maximale de ma webcam.
L'ampleur des fonctionnalités rend la prise en main un peu plus longue, sans être difficile,. Il y a beaucoup de choses à paramétrer donc beaucoup d'écrans et de menus. Mais l'interface est claire et si l'on a du mal à trouver ce que l'on cherche on sait qu'on y est quand on l'a trouvé.
Pour enregistrer la webcam il faudra créer une source vidéo et une source audio.
La configuration de la source audio est relativement simple en choisissant le type "Entrée PulseAudio". Le choix effectif de la source se fait en choisissant dans la liste des périphériques PulseAudio, proposés dans un menu déroulant. On peut choisir le micro de la webcam ou tout autre micro disponible.
Dans mon cas, la configuration de la source vidéo a été un peu plus compliquée car le paramètre d'encodage ne proposait pas //mjpeg//. Mais il proposait "YV12 (émulé)" qui avait les même performances (il m'a fallu tâtonner…).
La difficulté suivante est de ramener la taille de l'espace de travail (canevas) à définition qu'on a choisi pour la source vidéo. En effet, OBS est un studio avec plusieurs sources pouvant être combinée dans le flux de sortie, enregistré (notre cas) ou diffusé (le cas général).
Le réglage se trouve dans : Fichier > Paramètres > Vidéo. C'est l'occasion de choisir la définition de l'image de sortie. Dans notre cas, on choisira la définition de capture.
Si l'image déborde de la fenêtre, clic-droit sur l'aperçu > Mise à l'échelle de l'aperçu > Adapter à la fenêtre.
Il ne reste plus qu'à lancer l'enregistrement par un cli sur le bouton "Démarrer l'enregistrement".
==== VLC ====
Présent dans la plupart des configuration standard sur un ordinateur "de bureau"((Pas un serveur.)), ça a été mon premier choix.
Média > Ouvrir un périphérique de capture permet d'accéder à la configuration permettant de capture les signaux fournis par la webcam. C'est là que ça se corse… Ici, le flux vidéo est dénommé /dev/vidéo0 et me flux audio hw:x,y (par ex. hw:0,2).
Dans mon cas, VLC n'arrivait pas récupérer le flux vidéo compressé ce qui rendait l'acquisition extrêmement lourde. Les "options avancées" proposent bien de personnaliser les paramètres du configuration du pilote vidéo v4l2 mais dans un format qui suppose d'avoir digéré la 12 milliards d'options proposées et de ne pas se tromper dans la syntaxe imposée… J'ai lâché l'affaire en espérant trouver mieux.
==== Kdenlive ====
Certes, c'est un logiciel de montage mais il est également censé pouvoir récupérer le flux d'une webcam : Configuration > Configurer Kdenlive > Acquisition.
Dans mon cas, Kdenlive ne détecte aucun périphérique. L'écran de configuration de l'acquisition n'affiche pas le volet //ffmpeg// où le choix est censé se faire. Adieu le tout en un((C'est le logiciel de montage que j'utilise…)) !
==== Cheese ====
J'en avais lu tellement de bien que ça a été mon deuxième choix. Dans mon cas, cette application a donné un résultat vraiment pourri : 640x480 flou. Mes différentes tentatives de jouer sur les paramètres de configuration n'ont rien donné.
==== Kamoso ====
Kamoso, prévu pour tourner sous KDE, n'a rien donné d'exploitable. Aussitôt installé, aussitôt désinstallé.
===== Vérifier l'enregistrement =====
Bien sûr, la vérification est avant tout visuelle et sonore.
On peut aussi vérifier l'encodage effectif des flux audio et vidéo.
$ ffprobe nom_du_fichier
vous dira tout.