Acquisizione video su Linux: ffmpeg, GStreamer, OBS e strumenti GUI
Linux offre potenti e flessibili strumenti di acquisizione video—che tu stia catturando una webcam, registrando il desktop o acquisendo da una scheda di acquisizione. Gli strumenti CLI (ffmpeg, GStreamer) offrono controllo massimo; le GUI (OBS, SimpleScreenRecorder) offrono immediatezza.
Prerequisiti
- Identifica dispositivi:
v4l2-ctl --list-devicesols /dev/video*. - Installa codec:
sudo apt install ffmpeg gstreamer1.0-tools gstreamer1.0-plugins-{good,bad,ugly,base} v4l-utils(Debian/Ubuntu). - Permessi: Aggiungi utente al gruppo
video(sudo usermod -aG video $USER, riesegui login) o esegui consudo(non ideale).
Metodo 1: ffmpeg (Coltellino svizzero)
Migliore per scripting, server headless, controllo preciso e contenitori/codec esotici.
Cattura 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: Input Video4Linux2.-video_size: Deve corrispondere a una modalità supportata dalla camera (controllav4l2-ctl --list-formats-ext).-preset veryfast -crf 18: H.264 visivamente lossless, encodifica veloce. Usalibx265/-tag:v hvc1per HEVC.-pix_fmt yuv420p: Garantisce compatibilità con tutti i player (decoder hardware).
Cattura schermo (X11)
ffmpeg -f x11grab -r 30 -s 1920x1080 -i :0.0 \ -c:v libx264 -preset ultrafast -crf 0 output.mkv
-f x11grab: Cattura framebuffer X11. Per Wayland, usawf-recordero OBS.-r 30: Frame rate. Usa-framerateper input,-rper output.-crf 0: RGB lossless (file enormi). Usa-crf 18per percettivamente lossless.
Cattura schermo (Wayland / PipeWire) — Standard moderno
ffmpeg -f pipewire -framerate 30 -video_size 1920x1080 -i \ -c:v libx264 -preset veryfast -crf 18 output.mp4
Ottieni NODE_ID tramite pw-dump o usa wf-recorder -g "$(slurp)" -f out.mp4 (selezione regione interattiva).
Metodo 2: GStreamer (Potenza pipeline)
Ideale per embedded, streaming, o pipeline complesse multi-sorgente.
Webcam a 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: Negozia formato tra sorgente ed encoder.x264enc tune=zerolatency: Critico per streaming/bassa latenza.- Usa
nvh264enc/vaapih264encper encodifica hardware (NVIDIA/Intel/AMD).
Metodo 3: Applicazioni GUI (Consigliate per la maggior parte)
| App | Meglio per | Wayland? | Funzionalità chiave |
|---|---|---|---|
| OBS Studio | Streaming, Scene, Multi-sorgente, Replay Buffer | Sì (PipeWire) | NVENC/VA-API, Filtri, Mixaggio audio, Virtual Cam |
| SimpleScreenRecorder | Registrazione desktop rapida, iniezione OpenGL | Parziale (XWayland) | Interfaccia semplice, Anteprima live, Multi-monitor |
| Kooha | Nativo GNOME, interfaccia minimale | Sì | Regione/Finestra/Schermo, Overlay webcam, Encodifica hardware |
| wf-recorder | CLI/TUI, Wayland nativo, scripting | Sì (Nativo) | DMA-BUF, dmabuf feedback, screencopy, alte prestazioni |
| GNOME Screen Recorder | Integrato (Ctrl+Alt+Shift+R) | Sì | Zero config, solo WebM/VP9, nessuna selezione input audio |
Accelerazione hardware (VA-API / NVENC / VAAPI)
Spostare l'encodifica sulla GPU (massiccio risparmio CPU):
- Intel/AMD (VA-API):
-c:v h264_vaapi -vaapi_device /dev/dri/renderD128 -vf 'format=nv12,hwupload'(ffmpeg) ovaapih264enc(GStreamer). - NVIDIA (NVENC):
-c:v h264_nvenc -preset p4 -cq 19(ffmpeg) onvh264enc(GStreamer). Richiede driver proprietario +nvidia-encoder.
Cattura audio
Aggiungi -f pulse -i default (PulseAudio) o -f pipewire -i (PipeWire) a ffmpeg. In GStreamer: pulsesrc o pipewiresrc. OBS gestisce questo in Audio Mixer.
Scheda di riferimento rapida
# 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 # Schermo (Wayland, PipeWire, selezione regione via slurp) wf-recorder -g "$(slurp)" -c h264_vaapi -d /dev/dri/renderD128 -f recording.mp4
Inizia con OBS per lavoro interattivo. Passa a ffmpeg/GStreamer per automazione, server o pipeline personalizzate. Testa sempre sincronia audio (-itsoffset / async) sul tuo hardware specifico.