Skip to content

Instantly share code, notes, and snippets.

@h1z1
Forked from dwgill/mpvctl
Created December 17, 2020 16:20
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save h1z1/1fe6d721555f7e7620116239503b5361 to your computer and use it in GitHub Desktop.
Save h1z1/1fe6d721555f7e7620116239503b5361 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;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment