Skip to content

Instantly share code, notes, and snippets.

@dwgill
Last active January 25, 2023 02:00
Show Gist options
  • Star 29 You must be signed in to star a gist
  • Fork 5 You must be signed in to fork a gist
  • Save dwgill/a66769e0edef69c04d3b to your computer and use it in GitHub Desktop.
Save dwgill/a66769e0edef69c04d3b to your computer and use it in GitHub Desktop.
A small script for controlling mpv via the JSON IPC. Intended to resemble playerctl.
#!/usr/bin/env bash
# This script requires:
# - that the directory $HOME/.mpv exist
# - that the program socat be installed
# - that you start mpv with the unix socket feature pointing at that directory
# I recommend an alias in your .bashrc or equivalent file:
# alias mpv="mpv --input-unix-socket=$HOME/.mpv/socket"
socket="$HOME/.mpv/socket"
command() {
# JSON preamble.
local tosend='{ "command": ['
# adding in the parameters.
for arg in "$@"; do
tosend="$tosend \"$arg\","
done
# closing it up.
tosend=${tosend%?}' ] }'
# send it along and ignore output.
# to print output just remove the redirection to /dev/null
echo $tosend | socat - $socket &> /dev/null
}
# exit mpv
[ "$1" = "stop" ] && command 'quit'
# toggle play-pause
[ "$1" = "play-pause" ] && command 'cycle' 'pause'
# start playing
[ "$1" = "pause" ] && command 'set' 'pause' 'yes'
# stop playing
[ "$1" = "play" ] && command 'set' 'pause' 'no'
# play next item in playlist
[ "$1" = "next" ] && command 'playlist_next'
# play previous item in playlist
[ "$1" = "previous" ] && command 'playlist_prev'
# add item(s) to playlist
[ "$1" = "add" ] && shift &&
for video in "$@"; do
command 'loadfile' "$video" 'append-play';
done;
@nilox94
Copy link

nilox94 commented Nov 18, 2019

This is probably a small subset of mpvc.
https://github.com/lwilletts/mpvc/blob/master/mpvc

@gmt4
Copy link

gmt4 commented Dec 21, 2022

@dwgill nice ❤️

@ideasman42
Copy link

ideasman42 commented Jan 25, 2023

Starting using this script, while nice I wanted more advanced functionality so ported it to Python:
https://github.com/ideasman42/mpvctl/

... resolves the issue that paths from add needed to be absolute, mpvctl add *.mp3 would fail for e.g.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment