mpv の使いかた

2023-01-17

mpv の特徴

mpv は自由に使えるメディアプレーヤーで、次の特徴がある。

高品質設定で再生

ArchWikiの高品質設定を参考にして次のように設定する。

mkdir -p ~/.config/mpv
printf 'vo=gpu
  hwdec=auto-safe
  profile=gpu-hq
  scale=ewa_lanczossharp
  cscale=ewa_lanczossharp
  video-sync=display-resample
  interpolation
  tscale=oversample

ao=pipewire

# 音声のみのファイルでもウィンドウを表示する
force-window=yes

# コンソールへのメッセージ出力を減らす
quiet=yes
' > ~/.config/mpv/mpv.conf

負荷が高い場合は控えめな品質にする。

mkdir -p ~/.config/mpv
printf 'vo=gpu
  hwdec=auto-safe
  profile=gpu-hq

ao=pipewire

# 音声のみのファイルでもウィンドウを表示する
force-window=yes

# コンソールへのメッセージ出力を減らす
quiet=yes
' > ~/.config/mpv/mpv.conf

gpu-hq プロファイルの内容は次の通り。

mpv --show-profile=gpu-hq

# Profile gpu-hq: 
#  scale=spline36
#  cscale=spline36
#  dscale=mitchell
#  dither-depth=auto
#  correct-downscaling=yes
#  linear-downscaling=yes
#  sigmoid-upscaling=yes
#  deband=yes

GPUレンダラー(動画再生支援)を使用できているか確認

mpv --vo=gpu --hwdec=auto-safe --ao=pipewire https://www.youtube.com/watch?v=sDyDHvZKl8g

q を押して再生を止めたあと、ターミナルに次の表示があればOK。

# Using hardware decoding (vaapi).

外部のアップスケーラーを利用

インストール

# RAVU: RAISR(高速で正確な画像超解像技術)に触発されたアップスケーラー
mkdir -p ~/tmp_arch/
cd ~/tmp_arch/
wget https://github.com/bjin/mpv-prescalers/raw/master/ravu-lite-r2.hook
wget https://github.com/bjin/mpv-prescalers/raw/master/ravu-lite-r3.hook
wget https://github.com/bjin/mpv-prescalers/raw/master/ravu-lite-r4.hook
mkdir -p ~/.config/mpv/shaders
mv ravu-lite-r*.hook ~/.config/mpv/shaders/

# FSRCNNX: 高速超解像畳み込みニューラルネットワーク によるアップスケーラー
mkdir -p ~/tmp_arch/
cd ~/tmp_arch/
wget https://github.com/igv/FSRCNN-TensorFlow/releases/download/1.1/FSRCNNX_x2_8-0-4-1.glsl
mkdir -p ~/.config/mpv/shaders
mv FSRCNNX_x2_*.glsl ~/.config/mpv/shaders/

# Anime4K: 1080pアニメの4K化に特化したアップスケーラー
mkdir -p ~/.config/mpv/shaders
rm -f ~/.config/mpv/shaders/Anime4K*
mkdir -p ~/tmp_arch/Anime4K
cd ~/tmp_arch/Anime4K
wget https://github.com/bloc97/Anime4K/releases/download/v4.0.1/Anime4K_v4.0.zip
unzip Anime4K_v4.0.zip
mv *.glsl ~/.config/mpv/shaders/

# adaptive-sharpen
# こちらからダウンロード
# https://gist.github.com/igv
mkdir -p ~/.config/mpv/shaders
mv adaptive-sharpen.glsl ~/.config/mpv/shaders/

# SSimSuperRes
# こちらからダウンロード
# https://gist.github.com/igv
mkdir -p ~/.config/mpv/shaders
mv SSimSuperRes.glsl ~/.config/mpv/shaders/

各アップスケーラーにショートカットキーを割り当てる

次の行を ~/.config/mpv/input.conf に追加する。

# シェーダー変更
CTRL+1 no-osd change-list glsl-shaders set "~~/shaders/ravu-lite-r2.hook"; show-text "ravu-lite-r2"

CTRL+2 no-osd change-list glsl-shaders set "~~/shaders/ravu-lite-r3.hook"; show-text "ravu-lite-r3"

CTRL+3 no-osd change-list glsl-shaders set "~~/shaders/ravu-lite-r4.hook"; show-text "ravu-lite-r4"

CTRL+4 no-osd change-list glsl-shaders set "~~/shaders/FSRCNNX_x2_8-0-4-1.glsl"; show-text "FSRCNNX_x2_8-0-4-1"

CTRL+5 no-osd change-list glsl-shaders set "~~/shaders/Anime4K_Clamp_Highlights.glsl:~~/shaders/Anime4K_Restore_CNN_M.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_M.glsl:~~/shaders/Anime4K_AutoDownscalePre_x2.glsl:~~/shaders/Anime4K_AutoDownscalePre_x4.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_S.glsl"; show-text "Anime4K: Mode A (Fast)"

CTRL+6 no-osd change-list glsl-shaders set "~~/shaders/Anime4K_Clamp_Highlights.glsl:~~/shaders/Anime4K_Restore_CNN_Soft_M.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_M.glsl:~~/shaders/Anime4K_AutoDownscalePre_x2.glsl:~~/shaders/Anime4K_AutoDownscalePre_x4.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_S.glsl"; show-text "Anime4K: Mode B (Fast)"

CTRL+7 no-osd change-list glsl-shaders set "~~/shaders/Anime4K_Clamp_Highlights.glsl:~~/shaders/Anime4K_Upscale_Denoise_CNN_x2_M.glsl:~~/shaders/Anime4K_AutoDownscalePre_x2.glsl:~~/shaders/Anime4K_AutoDownscalePre_x4.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_S.glsl"; show-text "Anime4K: Mode C (Fast)"

CTRL+8 no-osd change-list glsl-shaders set "~~/shaders/adaptive-sharpen.glsl"; show-text "adaptive-sharpen"

CTRL+9 no-osd change-list glsl-shaders set "~~/shaders/SSimSuperRes.glsl"; show-text "SSimSuperRes"

CTRL+0 no-osd change-list glsl-shaders clr ""; show-text "GLSL shaders cleared"

CTRL+1 で “ravu-lite-r2”、
CTRL+2 で “ravu-lite-r3”、
CTRL+3 で “ravu-lite-r4”、
CTRL+4 で “FSRCNNX_x2_8-0-4-1”、
CTRL+5 で “Anime4K: Mode A (Fast)”、
CTRL+6 で “Anime4K: Mode B (Fast)”、
CTRL+7 で “Anime4K: Mode C (Fast)”、
CTRL+8 で “adaptive-sharpen”、
CTRL+9 で “SSimSuperRes”、
CTRL+0 で 外部シェーダーを無効にする。

アップスケーラーの品質を比較

# 元画像
mpv https://c4.wallpaperflare.com/wallpaper/300/319/704/5bd32e94974f2-wallpaper-preview.jpg --fs --pause

ディスプレイ解像度の縦横半分程度の画像を用意し、フルスクリーンで表示する。
小さい画像をウィンドウで等倍表示すると、アップスケーラーの効果が出にくい。

“spline36”。gpu-hq プロファイルのデフォルトのアップスケーラー。画像がぼやける。

“ravu-lite-r2”。品質が高く負荷は低い。実写映像に向いている。

“ravu-lite-r3”。品質が高く負荷は低い。実写映像に向いている。

“ravu-lite-r4”。品質が高く負荷は低い。実写映像に向いている。

“FSRCNNX_x2_8-0-4-1”。品質は高いが内蔵GPUだと負荷が高め。

“Anime4K: Mode A (Fast)”。“Anime4K” は1080pアニメを4Kにアップスケールすることに特化している。480p程度の画像には向いていないが参考情報として。実写だと蝶の羽の鱗粉が潰れてのっぺりとした質感になる。イラストには向いているが FSRCNNX より更に負荷が高く、動画をリアルタイムに4Kへアップスケールする場合は GTX 1060 程度のGPU が必要。

“Anime4K: Mode B (Fast)”。実写だとぼやけて見えるがイラストだと髪の周りのノイズが減る。

“Anime4K: Mode C (Fast)”。“Mode A (Fast)” より鱗粉の潰れが少なく、高速。実写映像にも向いている。

“adaptive-sharpen”。シャープで明るい。

“SSimSuperRes”。adaptive-sharpen より少しぼやけるが自然。

デフォルトのアップスケーラーを変更

例として ravu-lite-r2 に変更する。

mkdir -p ~/.config/mpv
printf 'vo=gpu
  hwdec=auto-safe
  profile=gpu-hq
  glsl-shaders="~~/shaders/ravu-lite-r2.hook"

ao=pipewire

# 音声のみのファイルでもウィンドウを表示する
force-window=yes

# コンソールへのメッセージ出力を減らす
quiet=yes

# 常にウィンドウを最大化
#window-maximized=yes
' > ~/.config/mpv/mpv.conf

参考: アップスケーラーの品質を数値で比較

João Vitor Chrisóstomo が mpv のアップスケーラーの品質を数値で比較している。

品質比較: アニメ画像

速度比較

キー割り当てを変更

次の行を ~/.config/mpv/input.conf に追加する。

# 右クリックによる一時停止を無効にする
MBTN_RIGHT ignore

# マウスホイールによる音量操作を無効にする
WHEEL_UP ignore
WHEEL_DOWN ignore
WHEEL_LEFT ignore
WHEEL_RIGHT ignore

# PageUp/PageDown で10分移動
PGUP seek 600
PGDWN seek -600

# Shift + PageUp/PageDown でチャプタ移動
Shift+PGUP add chapter 1
Shift+PGDWN add chapter -1

# Enter/Esc で終了
ENTER quit
ESC quit

右下の時間表示を「残り時間」から「全体の時間」に変更

画面右下の時間表示を「残り時間」から「全体の時間」に変更する。

mkdir -p ~/.config/mpv/script-opts

printf 'timetotal=yes
' > ~/.config/mpv/script-opts/osc.conf

HOME