Title: Use a gamepad to control mpv video playback
Author: Solène
Date: 21 June 2022
Tags: opensource unix
Description: This article explains how to configure mpv to control it
using a gamepad.

# Introduction

This is certainly not a common setup, but I have a laptop plugged on my
TV through an external GPU, and it always has a gamepad connected to
it.  I was curious to see if I could use the gamepad to control mpv
when watching videos; it turns out it's possible.

In this text, you will learn how to control mpv using a gamepad / game
controller by configuring mpv.

# Configuration

All the work will happen in the file ~/.config/mpv/inputs.conf.  As mpv
uses the SDL framework this gives easy names to the gamepad buttons and
axis.  For example, forget about brand specific buttons names (A, B, Y,
square, triangle etc...), and welcome generic names such as action UP,
action DOWN etc...

Here is my own configuration file, comments included:

```mpv configuration file
# left and right (dpad or left stick axis) will move time by 30 seconds increment
GAMEPAD_DPAD_RIGHT seek +30
GAMEPAD_DPAD_LEFT seek -30

# using up/down will move to next/previous chapter if the video supports it
GAMEPAD_DPAD_UP add chapter 1
GAMEPAD_DPAD_DOWN add chapter -1

# button down will pause or resume playback, the "cycle" keyword means there are different states (pause/resume)
GAMEPAD_ACTION_DOWN cycle pause

# button up will switch between windowed or fullscreen
GAMEPAD_ACTION_UP cycle fullscreen

# right trigger will increase playback speed every time it's pressed by 20%
# left trigger resets playback speed
GAMEPAD_RIGHT_TRIGGER multiply speed 1.2
GAMEPAD_LEFT_TRIGGER set speed 1.0
```

You can find the actions list in mpv man page, or by looking at the
sample inputs.conf that should be provided with mpv package.

# Run mpv

By default, mpv won't look for gamepad inputs, you need to add
--input-gamepad=yes parameter when you run mpv, or add
"input-gamepad=yes" as a newline in ~/.config/mpv/mpv.conf mpv
configuration file.

If you use a button on the gamepad while mpv is running from a
terminal, you will have some debug output showing you which button was
pressed, including its name, this is helpful to find the inputs names.

# Conclusion

Using the gamepad instead of a dedicated remote is very convenient for
me, no extra expense, and it's very fun to use.