Capture vidéo sur Linux : ffmpeg, GStreamer, OBS & outils GUI
Linux offre une capture vidéo puissante, flexible — que vous capturiez une webcam, enregistriez votre bureau, ou ingériez depuis une carte de capture. Les outils CLI (ffmpeg, GStreamer) offrent un contrôle maximal ; les GUI (OBS, SimpleScreenRecorder) offrent l'immédiateté.
Prérequis
- Identifier les périphériques :
v4l2-ctl --list-devicesouls /dev/video*. - Installer codecs :
sudo apt install ffmpeg gstreamer1.0-tools gstreamer1.0-plugins-{good,bad,ugly,base} v4l-utils(Debian/Ubuntu). - Permissions : Ajoutez l'utilisateur au groupe
video(sudo usermod -aG video $USER, reconnexion) ou lancez avecsudo(pas idéal).
Méthode 1 : ffmpeg (Couteau suisse)
Idéal pour scripting, serveurs headless, contrôle précis, conteneurs/codecs exotiques.
Capture webcam (V4L2)
ffmpeg -f v4l2 -framerate 30 -video_size 1280x720 -i /dev/video0 \ -c:v libx264 -preset veryfast -crf 18 -pix_fmt yuv420p \ -c:a aac -b:a 128k output.mp4
-f v4l2: Entrée Video4Linux2.-video_size: Doit correspondre à un mode supporté par la caméra (vérifiezv4l2-ctl --list-formats-ext).-preset veryfast -crf 18 : H.264 visuellement lossless, encodage rapide. Utilisezlibx265/-tag:v hvc1pour HEVC.-pix_fmt yuv420p: Assure compatibilité tous lecteurs (décodeurs matériels).
Capture écran (X11)
ffmpeg -f x11grab -r 30 -s 1920x1080 -i :0.0 \ -c:v libx264 -preset ultrafast -crf 0 output.mkv
-f x11grab: Capture framebuffer X11. Pour Wayland, utilisezwf-recorderou OBS.-r 30: Cadence. Utilisez-frameratepour entrée,-rpour sortie.-crf 0: Lossless RGB (fichiers énormes). Utilisez-crf 18pour lossless perceptuel.
Capture écran (Wayland / PipeWire) — Standard moderne
ffmpeg -f pipewire -framerate 30 -video_size 1920x1080 -i \ -c:v libx264 -preset veryfast -crf 18 output.mp4
Obtenez NODE_ID via pw-dump ou utilisez wf-recorder -g "$(slurp)" -f out.mp4 (sélection interactive région).
Méthode 2 : GStreamer (Puissance pipeline)
Idéal pour embarqué, streaming, ou pipelines multi-source complexes.
Webcam vers H.264 MP4
gst-launch-1.0 v4l2src device=/dev/video0 ! \ video/x-raw,width=1280,height=720,framerate=30/1 ! \ videoconvert ! x264enc tune=zerolatency bitrate=6000 speed-preset=fast ! \ mp4mux ! filesink location=webcam.mp4
videoconvert: Négocie format entre source et encodeur.x264enc tune=zerolatency: Critique pour streaming/faible latence.- Utilisez
nvh264enc/vaapih264encpour encodage matériel (NVIDIA/Intel/AMD).
Méthode 3 : Applications GUI (Recommandé pour la plupart)
| App | Idéal pour | Wayland? | Fonctionnalités clés |
|---|---|---|---|
| OBS Studio | Streaming, Scènes, Multi-source, Replay Buffer | Oui (PipeWire) | NVENC/VA-API, Filtres, Mixage audio, Virtual Cam |
| SimpleScreenRecorder | Enregistrement bureau rapide, injection OpenGL | Partiel (XWayland) | UI simple, Aperçu live, Multi-écran |
| Kooha | GNOME-natif, UI minimal | Oui | Région/Fenêtre/Écran, Overlay webcam, Encodage matériel |
| wf-recorder | CLI/TUI, Wayland-natif, scripting | Oui (Natif) | DMA-BUF, dmabuf feedback, screencopy, haute perf |
| GNOME Screen Recorder | Intégré (Ctrl+Alt+Shift+R) | Oui | Zéro config, WebM/VP9 seulement, pas sélection entrée audio |
Accélération matérielle (VA-API / NVENC / VAAPI)
Déléguez l'encodage au GPU (économie CPU massive) :
- Intel/AMD (VA-API) :
-c:v h264_vaapi -vaapi_device /dev/dri/renderD128 -vf 'format=nv12,hwupload'(ffmpeg) ouvaapih264enc(GStreamer). - NVIDIA (NVENC) :
-c:v h264_nvenc -preset p4 -cq 19(ffmpeg) ounvh264enc(GStreamer). Nécessite pilote proprio +nvidia-encoder.
Capture audio
Ajoutez -f pulse -i default (PulseAudio) ou -f pipewire -i (PipeWire) à ffmpeg. Dans GStreamer : pulsesrc ou pipewiresrc. OBS gère cela dans le mélangeur audio.
Fiche de référence rapide
# Webcam (H.264, hwaccel VA-API) ffmpeg -init_hw_device vaapi=foo:/dev/dri/renderD128 -filter_hw_device foo \ -f v4l2 -i /dev/video0 -vf 'format=nv12|vaapi,hwupload' -c:v h264_vaapi -qp 22 out.mp4 # Écran (Wayland, PipeWire, sélection région via slurp) wf-recorder -g "$(slurp)" -c h264_vaapi -d /dev/dri/renderD128 -f recording.mp4
Commencez avec OBS pour le travail interactif. Passez à ffmpeg/GStreamer pour automatisation, serveurs, ou pipelines custom. Testez toujours la sync audio (-itsoffset / async) sur votre matériel spécifique.
