2017/09/18

mpvにおけるキーボードやマウスの割り当てとその設定

動画・音声プレーヤmpvのキーボードやマウスの割り当てとそのカスタマイズについてを扱う。

  1. キーとマウスの既定の割り当て
  2. キーやマウスの割り当て設定によってできること
  3. 設定ファイルと書式
  4. 内部の入力コマンド
  5. 操作割り当ての設定例
  6. Luaスクリプトの処理を割り当てる

キーとマウスの既定の割り当て

既定のキー割り当てはmanページの先頭付近にある “Keyboard Control” に、マウスの割り当てはその下にある “Mouse Control” にそれぞれ書かれている。

  • LEFT/RIGHT/UP/DOWNは矢印キーを表している
  • “A and B” 形式の記述は対になる操作がAとBの各キーに割り当てられていることを示す
  • mpv内のマウスのボタン番号は0からでX11上のボタン番号から1引いた値となり、ホイールにおけるボタン番号も同様にずれている

キーやマウスの割り当て設定によってできること

  • manページの “Property list” にある項目(プロパティ)の内、書き込み可能なもの(丸括弧内に “RW” か “W” が書かれているもの)の値をキーやマウス操作で変更
  • 一部のコマンド行オプションによって指定される設定(例:OSDのフォントサイズ)をキーやマウス操作で変更
  • シーク(早送りもしくは巻き戻し)の操作や幅を自由に設定
  • 既存のキーやマウスの割り当ての無効化

設定ファイルと書式

キーやマウスの割り当ての設定ファイルはinput.confで、行単位(1行に1つの設定)で割り当て設定を記述していく。

# 基本的な書式
[操作を示す文字列] [内部の入力コマンド] ([コマンドの引数...])

# プロパティ名を指定して値を適用
[操作を示す文字列] [set や add など] [プロパティ名] [値]

# オプションで指定される設定に値を適用
[操作を示す文字列] [set や add など] options/[オプション名の "--" の後ろの部分] [値]

操作を示す文字列は、単独のキーの場合は他のアプリケーションでテキストの入力時にそれを押すことで入力される1文字となり、Shiftキーとの同時押しは “Shift+” の形での記述の他に大文字アルファベットや “!” のような記号を用いて表現することもできる(つまり大文字と小文字は表記が区別される)。この他、"mpv --input-keylist“ の実行によって一覧表示される特殊な表記のキーも使用できる。マウスのボタンはこの中に含まれており、ダブルクリックも表現できる。

表記操作
Ctrl+xCtrl+x
Ctrl+GCtrl+Shift+g
PGDWNPgDn
Ctrl+Shift+KP4Ctrl+Shift+KP4(テンキーの4)
MOUSE_BTN0マウスの0番(左)ボタンクリック
MOUSE_BTN1_DBLマウスの1番(中)ボタンダブルクリック

キーによっては端末内で再生ウィンドウなしで動いているときには正しく動作しないものがあり、音声のみのファイルでは--force-windowオプションを付けて再生ウィンドウ内で再生する必要がある。マウスのボタンに対する割り当ても同様。

内部の入力コマンド

内部の入力コマンドの一覧はmanページの "List of Input Commands” および “Input Commands that are Possibly Subject to Change” にある。内部コマンドによっては引数が付く(書式についての説明で記述したsetaddもその例)。

cycle-valuesはプロパティ値を指定するものの中では特殊で、最初の実行では羅列した値の最初の値を設定し、次の実行では次の値に切り替えていくのを繰り返して、最後まで到達したら次は最初の値を設定する(値が循環する)。

操作割り当ての設定例

[一部]ファイル名:${XDG_CONFIG_HOME}/mpv/input.conf もしくは [ホームディレクトリ]/.config/mpv/input.conf
# "seek" は 秒単位のシーク操作を行い
# 正の値は早送り, 負の値は巻き戻しとなる
# 下は *左手の* 人差し指を "j" キーに置いて
# g(左) -- j(右) と y(上) -- h(下) としてシークする例
g seek -5
j seek 5
y seek 10
h seek -10
# Shift との同時押しで幅を大きくする
G seek -20
J seek 20
Y seek 60
H seek -60
# 更に Ctrl との同時押しで幅をもっと大きくする
Ctrl+g seek -30
Ctrl+j seek 30
Ctrl+y seek 300
Ctrl+h seek -300
Ctrl+G seek -600
Ctrl+J seek 600
Ctrl+Y seek 1800
Ctrl+H seek -1800

# 同様にテンキーでシークする
KP4 seek -5
KP6 seek 5
KP8 seek 10
KP2 seek -10
Shift+KP4 seek -20
Shift+KP6 seek 20
Shift+KP8 seek 60
Shift+KP2 seek -60
Ctrl+KP4 seek -30
Ctrl+KP6 seek 30
Ctrl+KP8 seek 300
Ctrl+KP2 seek -300
Ctrl+Shift+KP4 seek -600
Ctrl+Shift+KP6 seek 600
Ctrl+Shift+KP8 seek 1800
Ctrl+Shift+KP2 seek -1800

# "add [プロパティ名] [加算値]" は元のプロパティ値からの相対値で
# プロパティ値を変更する
# 絶対的な値を指定するには
# "set [プロパティ名] [値]" を指定
# 元のプロパティ値に対して掛け算を行うには
# multiply [プロパティ名] [掛ける値]

# チャプタのあるファイルでチャプタを切り替えるキーを割り当てる
Ctrl+c add chapter -1
# "add [プロパティ名]" は "add [プロパティ名] 1" と同様
# 元のプロパティ値を 1 加算する
Ctrl+v add chapter

# OSD のフォントサイズを再生中に変更
# Ctrl+z で 1 小さく、Ctrl+x で 1 大きくする
Ctrl+z add options/osd-font-size -1
Ctrl+x add options/osd-font-size

# 複数のオーディオ出力先を定義して切り替え可能にする
# 状況と切り替え操作によっては終了するまで音が出なくなる
Ctrl+1 set audio-device pulse
# "pulse/[名前]" で PulseAudio の sink 名を指定できる
# 下の場合は "ladspa1" の名前でプラグインを読み込んでおく必要がある
Ctrl+2 set audio-device pulse/ladspa1
# JACK の使用時用
# 別途必要に応じて同階層の mpv.conf に "jack-port=[接続先ポート名]" を記述する
Ctrl+3 set audio-device jack

# "ignore" は既定のキー割り当てを無視して何もしない
# 下はミュート切り替えを禁止する例
m ignore


# マウスの真ん中ボタンでミュート切り替え
# "cycle-values" は実行の度に指定プロパティ(最初の引数)の値を
# 後ろに羅列した値に順に切り替え、最後に達したら最初に戻る
MOUSE_BTN1 cycle-values ao-mute yes no

# Ctrl+ホイール上下で 5% 単位でシークする
Ctrl+MOUSE_BTN3 seek 5 relative-percent
Ctrl+MOUSE_BTN4 seek -5 relative-percent

Luaスクリプトの処理を割り当てる

別の方法として、任意のファイル名のLuaスクリプトをscriptsディレクトリ(input.confと同じ階層に作成)に配置することでも同様のことができるが、input.confに記述したほうが高速に動作するので、同ファイルでできるような操作割り当て変更をLuaスクリプトに記述するのはあまりおすすめできない。同等のシーク操作をLuaスクリプトで実装したものとinput.confへ記述したものとを比べてみたところ、LuaスクリプトのほうがCPUをより多く使用する結果となった。

シーク以外ならそれほど気にならないかもしれないが、Luaスクリプトによる操作割り当てはinput.confではできない複雑なことをする必要がある場合に限り使用することをおすすめする。

使用方法としては、主にmp.set_property()を含んだ関数をmp.add_key_binding()に渡す形となる。

-- g を押すと 5 秒巻き戻す例
-- add_key_binding() の最初の引数は割り当てるキーで
-- 2番目は input.conf で他から割り当て可能にするための識別文字列
mp.add_key_binding ('g', 'seek_back_5', function ()
  mp.set_property ('time-pos', mp.get_property ('time-pos') - 5)
end)

上の処理を別のキーやマウスにも割り当てるには下のようにする。

[一部]ファイル名:${XDG_CONFIG_HOME}/mpv/input.conf もしくは [ホームディレクトリ]/.config/mpv/input.conf
# テンキーの 4 に割り当てる場合
KP4 script-message seek_back_5

# Ctrl+Shift+ホイール下 に割り当てる場合
Ctrl+Shift+MOUSE_BTN4 script-message seek_back_5
使用したバージョン:
  • mpv 0.24.0