Fedora 35 にしてから Celluloid がどうにも調子が悪い。
ブツブツとブラックアウトが入る、筆者自作の奴はもっと調子が悪いけど。
原因が解らない、mpv ライブラリが原因かな?
と思い確認のため素の mpv を入れてみた、dnf で普通に入れられる。
コチラはなんともない、てか mpv ってこんな感じだったっけ?
いや以前試しに使ってみたことはあるんだけど、もう何年も前だし。
今の筆者はコレで充分なんだけど、ということで乗り換えすることにした。
で、カスタムする方法を検索していたんですけど。
mpv – ArchWiki
日本語ページでは上記以外は情報が古過ぎで役に立たないな。
とにかく Linux でもハードウエア・アクセラレーションが使えると今頃知った。
あれ?と思ったけど筆者のその手の知識が古すぎるんだな。
それはそうと、Fedora では別途2つのライブラリを追加する必要がある。
Hardware decoding on Linux ? mpv-player/mpv Wiki ? GitHub
# Fedora dnf command
sudo dnf install libva-intel-driver
sudo dnf install libva-intel-hybrid-driver
Intel HD graphics の場合です。
AMD のグラフィックって元 ATI だし Linux への対応なんてお察しで。
準備はこれだけ、後は好みでカスタムしていくんですが拘りが二つ。
Esc はフルスクリーン解除、フルスクリーンでなければウインドウを閉じる。
ようするに Eye of GNOME の動作に合わせたい、筆者自作の奴もそうしていますし。
それとやはりディレクトリ内巡回機能が、プレイリスト化するのメンドイもん。
Ctrl+Down Ctrl+UP が標準では空いているのでココに割り付けしたい。
mpv.io
Lua や Javascript でなんとかなるっぽい。
こいつの js で ls する方法が解らないので Lua を久々に。
Lua の正規表現ってショボいな。
Javascript の /\.(mp4|m4v|mov)$/i を同様に定義できないんだが。
とりあえず *.mp4 だけでやってみた関数群。
ファイル名は何でもいい、場所は一行目に。
2022.01.12 複数の拡張子対応に書き換え、extstr 変数で指定
-- ~/.config/mpv/scripts/mpv_func.lua
extstr = 'mp4,m4v,mov'
-- Esc 時にフルスクリーンなら解除、でなければ終了
function on_escape()
if mp.get_property_bool('fullscreen') then
mp.set_property('fullscreen', 'no')
else
mp.command('quit')
end
end
mp.add_key_binding('Esc', 'esc_func', on_escape)
-- Ctrl+DOWN でディレクトリ内の次ファイルを再生
function on_nextfile()
local ex = false
local fn = mp.get_property('filename')
local directory = mp.get_property('path'):match('.*/')
local pfile = io.popen('ls "'..directory..'"')
for filename in pfile:lines() do
ext = filename:match('.*%.(.*)'):lower()
if not(extstr:match(ext) == nil) then
if ex then
mp.command('loadfile "file://'..directory..filename..'"')
break
end
ex = filename == fn
end
end
pfile:close()
end
mp.add_key_binding('Ctrl+DOWN', 'nextfile_func', on_nextfile)
-- Ctrl+UP でディレクトリ内の手前ファイルを再生
function on_prevfile()
local prevfn = ''
local fn = mp.get_property('filename')
local directory = mp.get_property('path'):match('.*/')
local pfile = io.popen('ls "'..directory..'"')
for filename in pfile:lines() do
ext = filename:match('.*%.(.*)'):lower()
if not(extstr:match(ext) == nil) then
if filename == fn then
if not(prevfn == '') then
mp.command('loadfile "file://'..directory..prevfn..'"')
end
break
end
prevfn = filename
end
end
pfile:close()
end
mp.add_key_binding('Ctrl+UP', 'prevfile_func', on_prevfile)
ハードウエア・アクセラレーション
# ~/.config/mpv/mpv.conf
# ハードウエア・アクセラレーション
profile=gpu-hq
hwdec=vaapi
tscale=oversample
correct-pts=yes
# 下記を指定すると筆者の環境 (i5-6500) ではコマ落ちする。
#scale=ewa_lanczossharp
#cscale=ewa_lanczossharp
#video-sync=display-resample
# 再生終了で本体を終了しない
keep-open=yes
ショートカット、とにかく EoG に合わせる
# ~/.config/mpv/input.conf
# GtkApplication ではないので Ctrl+Q で全体終了はできないけど
Ctrl+q quit
Ctrl+w quit
# GNOME アプリのフルスクリーンは F11 です
F11 cycle fullscreen
# 小さい動画は Ctrl+1 で FullHD にリサイズ
Ctrl+1 set autofit 1920x1080
# 回転、マイナスにはできないようなので
Ctrl+r add video-rotate 90
Ctrl+Shift+r add video-rotate -90
Ctrl+e add video-rotate 270
Ctrl+Shift+e add video-rotate -270
オンスクリーンコントローラを小さく
# ~/.config/mpv/script-opts/osc.conf
# 動画に合わせた OSC リサイズを無効に
vidscale=no
# OSC のサイズを少し小さくしてシークバー領域を増やす
scalewindowed=0.75
scalefullscreen=0.75
で。
vaapi が適用され動作も筆者の好みな環境ができあがりました。
もう筆者はプレイヤーを自作しなくていいな、そろそろ公開終了するか。
これからはスクリプトで拡張の時代ですよ。
いや、LUMIX らしく動画もやろうかなとも思ったんだけど。
手持ちじゃユラユラしちゃって、コレこそ三脚無しじゃ不可能でした。