Captura de video en Linux: ffmpeg, GStreamer, OBS y herramientas GUI

Linux ofrece captura de video potente y flexible, ya sea que estés grabando una webcam, grabando tu escritorio o ingestando desde una tarjeta de captura. Las herramientas de línea de comandos (ffmpeg, GStreamer) ofrecen control máximo; las GUIs (OBS, SimpleScreenRecorder) ofrecen inmediatez.

Requisitos previos

  • Identifica dispositivos: v4l2-ctl --list-devices o ls /dev/video*.
  • Instala códecs: sudo apt install ffmpeg gstreamer1.0-tools gstreamer1.0-plugins-{good,bad,ugly,base} v4l-utils (Debian/Ubuntu).
  • Permisos: Agrega al usuario al grupo video (sudo usermod -aG video $USER, vuelve a iniciar sesión) o ejecuta con sudo (no ideal).

Método 1: ffmpeg (Cuchillo suizo)

Ideal para scripts, servidores sin interfaz, control preciso y contenedores/códecs exóticos.

Captura de 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: Entrada Video4Linux2.
  • -video_size: Debe coincidir con un modo que la cámara admita (verifica v4l2-ctl --list-formats-ext).
  • -preset veryfast -crf 18: H.264 visualmente sin pérdida, codificación rápida. Usa libx265 / -tag:v hvc1 para HEVC.
  • -pix_fmt yuv420p: Asegura compatibilidad con todos los reproductores (decodificadores de hardware).

Captura de pantalla (X11)

ffmpeg -f x11grab -r 30 -s 1920x1080 -i :0.0 \ -c:v libx264 -preset ultrafast -crf 0 output.mkv
  • -f x11grab: Captura de framebuffer X11. Para Wayland, usa wf-recorder u OBS.
  • -r 30: Tasa de cuadros. Usa -framerate para entrada, -r para salida.
  • -crf 0: RGB sin pérdida (archivos enormes). Usa -crf 18 para pérdida percibida nula.

Captura de pantalla (Wayland / PipeWire) — Estándar moderno

ffmpeg -f pipewire -framerate 30 -video_size 1920x1080 -i  \ -c:v libx264 -preset veryfast -crf 18 output.mp4

Obtén NODE_ID mediante pw-dump o usa wf-recorder -g "$(slurp)" -f out.mp4 (selección interactiva de región).

Método 2: GStreamer (Potencia de canalización)

Ideal para sistemas integrados, transmisión o canalizaciones complejas de múltiples fuentes.

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: Negocia el formato entre la fuente y el codificador.
  • x264enc tune=zerolatency: Crítico para transmisión/baja latencia.
  • Usa nvh264enc / vaapih264enc para codificación de hardware (NVIDIA/Intel/AMD).

Método 3: Aplicaciones GUI (Recomendado para la mayoría)

AppIdeal para¿Wayland?Características clave
OBS StudioTransmisión, Escenas, Multi-fuente, Búfer de repeticiónSí (PipeWire)NVENC/VA-API, Filtros, Mezcla de audio, Cámara virtual
SimpleScreenRecorderGrabación rápida de escritorio, Inyección OpenGLParcial (XWayland)UI simple, Vista previa en vivo, Multi-monitor
KoohaNativo de GNOME, UI minimalistaSíRegión/Ventana/Pantalla, Superposición de webcam, Codificación de hardware
wf-recorderCLI/TUI, Nativo de Wayland, ScriptingSí (Nativo)DMA-BUF, retroalimentación dmabuf, screencopy, alto rendimiento
Grabador de pantalla de GNOMEIntegrado (Ctrl+Alt+Shift+R)SíSin configuración, solo WebM/VP9, sin selección de entrada de audio

Aceleración de hardware (VA-API / NVENC / VAAPI)

Descarga la codificación a la GPU (ahorro masivo de CPU):

  • Intel/AMD (VA-API): -c:v h264_vaapi -vaapi_device /dev/dri/renderD128 -vf 'format=nv12,hwupload' (ffmpeg) o vaapih264enc (GStreamer).
  • NVIDIA (NVENC): -c:v h264_nvenc -preset p4 -cq 19 (ffmpeg) o nvh264enc (GStreamer). Requiere controlador propietario + nvidia-encoder.

Captura de audio

Agrega -f pulse -i default (PulseAudio) o -f pipewire -i (PipeWire) a ffmpeg. En GStreamer: pulsesrc o pipewiresrc. OBS maneja esto en el Mezclador de audio.

Tarjeta de referencia rápida

# Webcam (H.264, aceleración 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 # Pantalla (Wayland, PipeWire, selección de región vía slurp) wf-recorder -g "$(slurp)" -c h264_vaapi -d /dev/dri/renderD128 -f recording.mp4

Empieza con OBS para trabajo interactivo. Pasa a ffmpeg/GStreamer para automatización, servidores o canalizaciones personalizadas. Siempre prueba la sincronización de audio (-itsoffset / async) en tu hardware específico.