Socat MPV
Tutorial: Controlar MPV con SOCAT
¿Qué es esto?
MPV tiene un servidor IPC (inter-process communication) que permite enviar comandos mientras el video está reproduciendo. Usamos socat para comunicarse con el socket.
Instalación
Arch Linux
sudo pacman -S socat
Debian/Ubuntu
sudo apt install socat
Asegurate de tener también mpv instalado:
# Arch
sudo pacman -S mpv
1. Abrir un video con socket habilitado
mpv video.mp4 --input-ipc-server=/tmp/mpv.sock
Esto crea un socket en /tmp/mpv.sock para recibir comandos.
2. Enviar comandos con socat
Silenciar/Desmutear (tecla m)
echo '{"command": ["keypress", "m"]}' | socat - /tmp/mpv.sock
Play/Pause (tecla espacio)
echo '{"command": ["keypress", "space"]}' | socat - /tmp/mpv.sock
Obtener volumen actual
echo '{"command": ["get_property", "volume"]}' | socat - /tmp/mpv.sock
Establecer volumen (0-100)
echo '{"command": ["set_property", "volume", 50]}' | socat - /tmp/mpv.sock
Obtener posición actual (tiempo)
echo '{"command": ["get_property", "time-pos"]}' | socat - /tmp/mpv.sock
Seek (ir a un tiempo específico en segundos)
echo '{"command": ["seek", 60]}' | socat - /tmp/mpv.sock # ir a 1:00
Obtener duración total
echo '{"command": ["get_property", "duration"]}' | socat - /tmp/mpv.sock
Salir de mpv
echo '{"command": ["quit"]}' | socat - /tmp/mpv.sock
3. Estructura de los comandos JSON
Los comandos siguen este formato:
{"command": ["nombre_del_comando", argumento1, argumento2, ...]}
Comandos con argumentos:
| Comando | Descripción | Ejemplo |
|---|---|---|
keypress |
Envía una tecla | ["keypress", "m"] |
set_property |
Cambia una propiedad | ["set_property", "volume", 80] |
get_property |
Obtiene una propiedad | ["get_property", "time-pos"] |
seek |
Ir a posición (segundos) | ["seek", 120] |
4. Script de ejemplo
#!/bin/bash
SOCKET="/tmp/mpv.sock"
case "$1" in
mute)
echo '{"command": ["keypress", "m"]}' | socat - $SOCKET
;;
pause)
echo '{"command": ["keypress", "space"]}' | socat - $SOCKET
;;
vol)
echo "{\"command\": [\"set_property\", \"volume\", $2]}" | socat - $SOCKET
;;
pos)
echo '{"command": ["get_property", "time-pos"]}' | socat - $SOCKET
;;
quit)
echo '{"command": ["quit"]}' | socat - $SOCKET
;;
*)
echo "Uso: $0 {mute|pause|vol <0-100>|pos|quit}"
;;
esac
Guardalo como mpvctl y usalo así:
chmod +x mpvctl
./mpvctl mute # silenciar
./mpvctl pause # play/pause
./mpvctl vol 50 # volumen al 50%
./mpvctl pos # ver posición actual
./mpvctl quit # cerrar mpv
5. Keys comunes de mpv
| Tecla | Acción |
|---|---|
space |
Play/Pause |
m |
Mute |
f |
Fullscreen |
left/right |
Retroceder/Avanzar 5s |
up/down |
Volumen +/- |
q |
Quit |
Notas
- El socket debe estar habilitado con
--input-ipc-server - Si el socket no existe, el comando falla
- Algunos comandos devuelven JSON con el resultado