Script de bash para grabar la pantalla en X11 (dwm) con ffmpeg, detectando la resolución con xrandr y eligiendo la fuente de audio con pactl (PipeWire/PulseAudio).

Uso:

./screenrecord.sh      # micrófono
./screenrecord.sh sys  # sonido del sistema (parlantes)

Presiona q para detener. Guarda en ~/videos/rec_FECHA.mkv.

#!/bin/bash
# Uso: screenrecord.sh [mic|sys]
#   mic (default) = graba micrófono
#   sys           = graba sonido del sistema (parlantes)

RES=$(xrandr --current | grep -w connected | grep -oP '\d{3,4}x\d{3,4}' | head -1)

if [ "$1" = "sys" ]; then
    SRC=$(pactl list short sources | grep '\.monitor' | head -1 | cut -f2)
    SRC="${SRC:-default}"
else
    SRC=$(pactl list short sources | grep -v '\.monitor' | head -1 | cut -f2)
    SRC="${SRC:-default}"
fi

OUT="$HOME/videos/rec_$(date +%Y%m%d_%H%M%S).mkv"
mkdir -p "$HOME/videos"

echo "Grabando $RES -> $OUT"
echo "Audio: $SRC (q para detener)"
ffmpeg -f x11grab -framerate 30 -video_size "$RES" -i "$DISPLAY" \
    -f pulse -i "$SRC" \
    -c:v libx264 -preset ultrafast -crf 23 -pix_fmt yuv420p \
    -c:a aac -b:a 128k "$OUT"