mpv の使用方法

2024-11-21

mpv の特徴

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

基本の設定

RAVU をインストール

RAVU は RAISR(Google の画像超解像技術)からインスピレーションを得たアップスケーラー。
DVD動画をFHDで表示したり、FHD動画を4Kで表示する場合に効果がある。
FHD動画をFHDモニターで再生する場合は、1倍表示なので効果はほとんどない。

# https://github.com/bjin/mpv-prescalers
rm -rf ~/tmp_mpv/RAVU
mkdir -p ~/tmp_mpv/RAVU

cd ~/tmp_mpv/RAVU/
wget https://github.com/bjin/mpv-prescalers/archive/refs/heads/master.zip
unzip -q master.zip

mkdir -p ~/.config/mpv/shaders
# gather ディレクトリのものが高速版
cp mpv-prescalers-master/gather/ravu-lite-r*.hook ~/.config/mpv/shaders/

mpv.conf を設定

~/.config/mpv/mpv.conf に次の内容を書く。

vo=gpu-next
gpu-api=vulkan
profile=high-quality

ao=pipewire

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

# 常にウィンドウを最大化
window-maximized=yes

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

# デフォルトのアップスケーラー
glsl-shaders="~~/shaders/ravu-lite-r2.hook"

ハードウェアデコーディングを使用する場合

上の設定の gpu-api=vulkanhwdec=auto-safe に変更。
この変更を行うと一部の外部アップスケーラー(ArtCNN CMP)を使用できなくなる。

ターミナルを開いて次のコマンドで動画を再生。数秒経ったら「Q」を押して終了。

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

ターミナルに「Using hardware decoding」の表示があれば成功。

その他の外部アップスケーラー

NVScaler

NVIDIA Image Scaling。Radeonでも使用できる。

# https://gist.github.com/agyild
rm -rf ~/tmp_mpv/NVScaler
mkdir -p ~/tmp_mpv/NVScaler
cd ~/tmp_mpv/NVScaler
wget https://gist.github.com/agyild/7e8951915b2bf24526a9343d951db214/raw/05f00864228871ffd157daa9beb2db8fa7412cfa/NVScaler.glsl
mkdir -p ~/.config/mpv/shaders
cp NVScaler.glsl ~/.config/mpv/shaders/

FSR

AMD FidelityFX Super Resolution

# https://gist.github.com/agyild
rm -rf ~/tmp_mpv/FSR
mkdir -p ~/tmp_mpv/FSR
cd ~/tmp_mpv/FSR
wget https://gist.github.com/agyild/82219c545228d70c5604f865ce0b0ce5/raw/2623d743b9c23f500ba086f05b385dcb1557e15d/FSR.glsl
mkdir -p ~/.config/mpv/shaders
cp FSR.glsl ~/.config/mpv/shaders/

Anime4K

アニメの4K化に特化したアップスケーラー。
「Mode A」は1080pアニメの4K化、「Mode B」は720pアニメの4K化、「Mode C」は480pアニメの4K化に最適化されている。
低速GPU向けの設定はこちら。高速GPU向けの設定はこちら

# https://github.com/bloc97/Anime4K/blob/master/md/GLSL_Instructions_Linux.md
rm -rf ~/tmp_mpv/Anime4K/Low-end
mkdir -p ~/tmp_mpv/Anime4K/Low-end
cd ~/tmp_mpv/Anime4K/Low-end
wget https://github.com/Tama47/Anime4K/releases/download/v4.0.1/GLSL_Mac_Linux_Low-end.zip
unzip -q GLSL_Mac_Linux_Low-end.zip
mkdir -p ~/.config/mpv/shaders
cp shaders/*.glsl ~/.config/mpv/shaders/

FSRCNNX

高速超解像畳み込みニューラルネットワークによるアップスケーラー。

# https://github.com/igv/FSRCNN-TensorFlow/releases
rm -rf ~/tmp_mpv/FSRCNN
mkdir -p ~/tmp_mpv/FSRCNN
cd ~/tmp_mpv/FSRCNN/
wget https://github.com/igv/FSRCNN-TensorFlow/releases/download/1.1/FSRCNNX_x2_16-0-4-1.glsl
wget https://github.com/igv/FSRCNN-TensorFlow/releases/download/1.1/FSRCNNX_x2_8-0-4-1.glsl
mkdir -p ~/.config/mpv/shaders
cp FSRCNNX_x2_*.glsl ~/.config/mpv/shaders/

ArtCNN

アニメコンテンツに最適化されたアップスケーラー。
「DS」が付くものはノイズ除去とシャープ化が行われ、ほとんどのWebソースで有用。
「CMP」が付くものは高速版で、Vulkan が必要(--gpu-api=vulkan)。

# https://github.com/Artoriuz/ArtCNN
rm -rf ~/tmp_mpv/ArtCNN
mkdir -p ~/tmp_mpv/ArtCNN
cd ~/tmp_mpv/ArtCNN/
wget https://github.com/Artoriuz/ArtCNN/archive/refs/heads/main.zip
unzip -q main.zip
mkdir -p ~/.config/mpv/shaders
cp ArtCNN-main/GLSL/Compute/ArtCNN_C4F{8,16}_DS_CMP.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.hook"

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

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

CTRL+4 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+5 no-osd change-list glsl-shaders set "~~/shaders/FSRCNNX_x2_8-0-4-1.glsl"; show-text "FSRCNNX_x2_8-0-4-1.glsl"

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

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

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

静止画で効果を比較

480p の動画をフルスクリーンで表示して一時停止。

yay -S --needed yt-dlp

# 実写動画
mpv --ytdl-format=244+251 --vo=gpu-next --gpu-api=vulkan --ao=pipewire https://www.youtube.com/watch?v=ue4irL_g-UE --start=00:04:38 --fs --pause

# アニメ動画
mpv --ytdl-format=244+251 --vo=gpu-next --gpu-api=vulkan --ao=pipewire https://www.youtube.com/watch?v=d0jg9hNHqn8 --start=00:00:22 --fs --pause

Ctrl+0, 1, 2… と順に押していき、アップスケーラーの効果を比較。
細かい模様の静止した物体(マイクなど)が映り込んでいると、効果を比較しやすい。

コマ落ちしないか確認

mpv --ytdl-format=244+251 --vo=gpu-next --gpu-api=vulkan --ao=pipewire https://www.youtube.com/watch?v=ue4irL_g-UE --fs

Shift+I を押して情報画面を表示。
Ctrl+0, 1, 2… と順に押していき、「Dropped Frames」の値が増えないか確認。

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

アップスケーラーの画質比較はこちら
ただし画質の良し悪しは主観に左右されるので、数値がすべてではない。単一の画像を使用して画質を比較しているので、別の画像だと別の結果になるかもしれない。

アップスケーラーの速度比較はこちら
「fast」プリセットの速度を1.0としたとき、「default」プリセットは0.78、「high-quality」プリセットは0.65、「ravu-lite-r2」シェーダーは0.70。

キーの割り当てを変更

~/.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

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

~/.config/mpv/script-opts に次の内容を書く。

timetotal=yes

音量を自動的に調整

動画の120秒目までの最大音量を測定し、それを基に適切な音量で再生する。

mpv_adjustvol.py

使用方法: python mpv-adjustvol.py file

HOME