それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

ssh 経由でmpv を起動して、動画再生したい。

raspi の64bit OS にはomxplayer がない

omxplayer が死ぬので、代替手段を考える。

omxplayer はその名の通り OpenMax を使ったものである。OpenMAX=OMXである。

しかし、32bit 版だけの対応である。64bit 版では対応していない。OpenMAXからソース提供やライブラリ提供が行われないため64bit版に対応不可能らしい。また、32bit 版は legacy 扱いなので今後の展開は期待できない。また、raspi4 からOpenMAXが外されたので今後の使えることはない。

そのうち対応するのかなと思って3年待ったがもう駄目のようです。

代替方法を考える必要がある。

実現したいこと

RaspiにSSHでログインして、動画を再生したい。

ディスプレイ・ミラーリングじゃ面倒くさいし、手元の動画をリモートに送るのが面倒くさい。

URLを叩いてRaspiに接続されたHDMIモニタに動画を流したい。

手元で見ている動画をテレビで流したい。

デジタルサイネージも同じように管理できる。

もし、遠隔から動画を再生できるのであれば、動画を流すだけのサイネージ・システムも手軽になるわけです。

独立したシステムなど要らず、SSHでコマンドを実行するだけで管理できる。

いままではomxplayer で出来てた

いままではRaspberryPiと HDMIモニタを使ってSSH経由でOMXPlayerを起動だけで、簡単に実現ができていた。

OmxPlayerなら、TVリモコンで「停止・再生」や「早送り・巻き戻し」が可能になって便利だった。

しかしomxplayer は死んだ。

omxplayer の代替としてのmpv

Xウインドウに直接画面を表示するにはいくつか方法があるが、キーボードから操作ができるものはmpv以外には無い。

そこで、mpv を使うことにする。

mpv でサイネージ(リモート再生)

例えば、次のようにすれば、mpv で再生ができる。

DISPLAY=:0 mpv  --fullscreen 'http://192.168.100.5/sample.mp4

--fullscreen--fs でもいけるっぽい

mpv のインストール

mpv は apt install でインストールが可能

sudo apt install mpv 

簡単です。

mpv の操作

キーボードショートカットで操作できる。

fは、小文字です。Aは大文字(Shift+a) です。

キー 効果
f フルスクリーン切替
O(オー) 時間表示切替
P 画面表示(押してるときだけ)
p pause ポーズ 切替
SPACE pause ポーズ 切替
1分進む
1分戻る
5秒進む
5秒戻る
} 再生速度 倍(200%)
{ 再生速度 半分(50%)
] 再生速度 +10%( 1.1倍, 1.21倍, 1.33倍...)
[ 再生速度 +10%( ..1.33倍, 1.21倍, 1.1倍, 1.0, 0.91, 0.83...)
BACKSPACE 再生速度 1.0倍に戻す
9 ボリュームアップ
0 ボリュームダウン
* ボリュームアップ
/ ボリュームダウン
m ミュート 切替
s スクショ保存
L ループ再生
A アスペクト比率 強制切替
q 停止
Q 停止(再生位置を記憶しレジューム可能で終了)

詳しくは 公式サイト を参照

なお、このキーボードショートカットは、設定ファイルで更新可能である。

またLuaスクリプトなどで拡張可能らしい。

キーボードとリモコンの関連付け。

後は、HDMICEC機能を使って、リモコンのボタンとMPVのキーボードショート・カットを割り当ててしまえば

Omxplayer と同じようにリモコンから操作ができるはずである

SSH経由で再生が開始すれば、あとはTVリモコンから制御ができる。

TVリモコンで制御するほうが簡単である。CEC使えるならリモコンでRaspiとMpvを紐づけしてしおけば、録画ファイルも簡単に視聴できる。

Raspi4 で再生時のCPU使用率

hevc コーデックの動画を再生した場合の負荷を測定した。720p

mpv はraspi4 で 遅延なく低負荷で再生できていて嬉しい。

デコードを明示したときでも、CPUパワーはそこまで使わない。

明示したときでも mpv --hwdec=yes --hwdec-codecs=hevc_v4l2m2m

そんなに変換しない。メモリもそこまで使わない。

明示してもしなくてもCPU負荷が変わらないので、mpvでhevc を再生するときは、なにもしなくてもハードウェア・デコードが効くのかもしれない。

Raspi4でHEVCを再生してこのパフォーマンスであれば、全然有りである。

録画ファイルはHEVCにして容量を削減

TV録画のファイルは HEVC h265 にしてしまえば、h264 よりも容量を70%ほど削減できる。

そもそも、地上波なんてものは、720pでしかないしパラパラのスライドのような動画である。HEVCで容量削減しても情報量はさして変わらない。地デジはスポーツ番組ですらひどいエンコード画質なので、もともと画質良くないので、圧縮しても、地デジだしそんなものだろうという程度である。

Raspi4 でHEVCがリモート再生できるのであれば、もうこれで再生して地デジのアーカイブは圧縮してしまおうと思った。

omxplayer はhevc 未対応だったのでmpv にすることで録画ファイルの取り扱いが軽くなる。私が動画ファイルに求めるのは情報である。画質ではなく情報であるため、画質はそこまで求めないとすれば、mpv でH265再生でいい気がする。

その他の方法

今回の解決方法は、mpv にDISPLAY環境変数をつけるだけである。

DISPLAY=0

これだけで行けるために、VLCmplayerffmpeg (ffplay)でも同じように再生ができると思う。

https://zenn.dev/yakumo/articles/24eee761d4534ca79c5ffcd9882c57f1

ほかにも、ブラウザのキオスクモードで再生させるという手段も有り得る。動画の再生速度制御・ループ・プレイリスト対応を考えるとmpv でいい気がする。スライドを再生するよりファイルをURLで制御するほうがサイネージ的には使いやすいだろうしね。

ただ、まぁTV用リモコンからの制御も含めて考えると、やはり、mpv が望ましい。

raspi 以外でも

n97 / n100 のミニPCでも mpv が動けば、同じことができると思われる。

omxplayer は openmax で raspi 専用コマンドだったが、mpv であれば汎用性は高い。