Fedora 35 にしてから Celluloid がどうにも調子が悪い。
ブツブツとブラックアウトが入る、筆者自作の奴はもっと調子が悪いけど。
原因が解らない、mpv ライブラリが原因かな?
と思い確認のため素の mpv を入れてみた、dnf で普通に入れられる。
コチラはなんともない、てか mpv ってこんな感じだったっけ?
いや以前試しに使ってみたことはあるんだけど、もう何年も前だし。
今の筆者はコレで充分なんだけど、ということで乗り換えすることにした。
で、カスタムする方法を検索していたんですけど。
日本語ページでは上記以外は情報が古過ぎで役に立たないな。
とにかく 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 が標準では空いているのでココに割り付けしたい。
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 らしく動画もやろうかなとも思ったんだけど。
手持ちじゃユラユラしちゃって、コレこそ三脚無しじゃ不可能でした。