Je partage une astuce, si vous souhaitez passer par la ligne de commande et avoir un résultat similaire à OBS (c'est à dire partager écran, webcam en overlay et le son).
La commande :
Code : Tout sélectionner
ffmpeg -y -f x11grab -s 1920x1080 -r 60 -i :0.0+1920,0 -f v4l2 -i /dev/video0 -f alsa -i pulse -filter_complex '[1:v]scale=240:-1, fps, setpts=PTS-STARTPTS [webcam]; [0:v][webcam]overlay=W-w-12:H-h-12' -vcodec libx264 -crf 20 -preset ultrafast -minrate 150k -maxrate 500k -s 1920x1080 -acodec aac -ar 44100 -ab 96000 -threads 0 -f mp4 record.mp4
Code : Tout sélectionner
ffmpeg -y -f x11grab -s 1920x1080 -r 60 -i :0.0+1920,0 \
-f v4l2 -i /dev/video0 \
-f alsa -i pulse \
-filter_complex '[1:v]scale=240:-1, fps, setpts=PTS-STARTPTS [webcam]; [0:v][webcam]overlay=W-w-12:H-h-12' \
-vcodec libx264 -crf 20 -preset ultrafast -minrate 150k -maxrate 500k -s 1920x1080 \
-acodec aac -ar 44100 -ab 96000 \
-threads 0 -f mp4 record.mp4
Tout simplement, il fallait juste placer l'input du son à la fin des deux inputs vidéos (3e ligne dans le fichier).
Pour avoir, à la fois le son système et micro, on peut créer un périphérique virtuel de cette façon (pulseaudio) :
Code : Tout sélectionner
pactl load-module module-null-sink sink_name=inputs
Code : Tout sélectionner
pactl load-module module-loopback sink=inputs
pactl load-module module-loopback sink=inputs
Donc, un sur l'input de l'entrée micro de la carte son, et l'autre sur l'input appelé "Monitor" (c'est le rebouclage de la sortie audio de la carte son).
Puis au lancement de ffmpeg lors de l'enregistrement, on l'affecte sur le périphérique virtuel input qu'on à créée en premier.
Si vous avez tout suivi ffmpeg devrait pouvoir recevoir les deux sons (micro et monitoring de la sortie audio).
Explication de la commande (vous pouvez adapter suivant le besoin):
ffmpeg -y -f x11grab -s 1920x1080 -r 60 -i :0.0+1920,0
Le
-y
c'est pour dire oui automatiquement lorsqu'il demande à écraser le fichier record.mp4 si celui-ci est présent.Ensuite viennent les paramètres correspondants à l'input à enregistrer.
Donc le premier input correspond au serveur d'affichage X11
-f x11grab
.Le
-s
résolution, -r
le framerate.Le
-i
si vous avez un seul écran 0.0
suffis. Sinon si vous avez un deuxième écran (par exemple sur la droite) et que vous souhaitez enregistrer celui-ci il faut rajouter +1920,0
.-f v4l2 -i /dev/video0
Ici on choisi un deuxième input qui correspond à la webcam.
-f alsa -i pulse
Notre troisième input c'est l'audio, donc on passe par le driver ALSA et on récupère le "périphérique" pulse. Il faut le paquet pulseaudio-alsa installé.
-filter_complex '[1:v]scale=240:-1, fps, setpts=PTS-STARTPTS [webcam]; [0:v][webcam]overlay=W-w-12:H-h-12'
Ce paramètre de filtre, est celui qui va "composer" l'ensembe des entrées vidéos afin d'obtenir l'overlay souhaité.
[0:v]
correspond au première paramètre d'input, c'est à dire l'écran = -f x11grab -s 1920x1080 -r 60 -i :0.0+1920,0
[1:v]
correspond au deuxième paramètre d'input, c'est à dire la webcam = -f v4l2 -i /dev/video0
Sur la webcam
[1:v]
, on va lui appliquer une résolution et mise à l’échelle de 240:-1
(à changer suivant vos besoins).fps
et setpts=PTS-STARTPTS
sont des options pour que la vidéo webcam soit au bon timing par rapport à l'input vidéo de base (ici notre écran/bureau).[webcam]
, c'est le nom (vous pouvez le changer), que l'on donne à l'ensemble des options affectés à la webcam [1:v]
.Dernière partie de ce paramètre un peu complexe, c'est la composition de l'overlay.
On commence par déclarer la base est l'écran, le fond principal où va se reposer la webcam.
On débute donc par
[0:v]
suivi de [webcam]
(si vous avez changé le nom précédemment, faut le modifier), on rajoute l'option overlay
, et les coordonnées en pixel.overlay=W-w-12:H-h-12
correspond à la vidéo webcam placé en bas à droite avec un espace par rapport au bord de l’écran (vertical et horizontal) de 12 pixels.-vcodec libx264 -crf 20 -preset ultrafast -minrate 150k -maxrate 500k -s 1920x1080
Derniere partie, la sortie.
Ici on utilise l'encodage h264, avec un contrôle CRF de 20.
Un preset rapide "ultrafast". La compression sera moins importante, donc moins de charge CPU. Cependant, le fichier prendra plus de place.
On peut définir une fourchette de rate (ceci est optionnel). Et la résolution de sortie (je reste fidèle à la résolution HD de mon écran).
-acodec aac -ar 44100 -ab 96000
Encodage audio, en AAC avec un rate de 44,1kHz et bitrate de 96k.
-threads 0 -f mp4 record.mp4
Dernier point, le nombre de threads à 0, pour utiliser tout les cœurs du CPU.
-f mp4
pour choisir le format de sortie donc mp4.Et finalement le fichier de sortie record.mp4.
Voilà, je tenez à partager tout ceci, ça pourra en aider certains.
S'il y a des choses qui peuvent être amélioré je suis preneurs