猫のふーちゃんは最近YouTubeを覚えた様子。スマホを触っているとYouTubeで「猫が喜ぶ動画」を見せろと要求して来ます。どうやら幼児くらいの知能があるようです。
そんなふーちゃんのために、「猫が喜ぶ動画」をエンドレスで再生する「猫シアター」を作成してみました。
完成の様子
まずは完成した状態をごらんください
用意したもの
- 使っていないRaspberry Pi 3B
- 壊れたiPadから取り外したRetina液晶
- 百均で購入した、表彰状などを入れるフレーム
- 猫が喜ぶ動画はこちらをお借りしました。ありがとうございます。
作成中のフレームを裏から見た様子。3Dプリンタで作成したフレームは外しました。
手順
基本的に過去記事と同じ事をします。ブラウザ(Chromium)の代わりにVLCを起動します。
Raspberry Pi Imager
いつも通り、Raspberry Pi ImagerでOSを新規作成します。今回はRaspbian 32bit を選択しました。
OSセットアップ
ufw
「ローカルで誰もアタックしないからファイアーウォールなんて不要だよ。」なんて言わずに、設定しておきましょう。sshもVNCも使わないって方は、4行目、5行目は不要です。ポート番号を変えてるよって方は番号を変更してください。
$ sudo apt-get install ufw
$ sudo ufw disable
$ sudo ufw default deny
$ sudo ufw allow proto tcp from 192.168.1.0/24 to any port 22
$ sudo ufw allow proto tcp from 192.168.1.0/24 to any port 5900
$ sudo ufw enable
自動更新を有効
「ローカルだから更新なんて良いんだよ。」って言わずに、自動更新は必ず仕掛けておきましょう。
$ sudo apt install unattended-upgrades
$ sudo dpkg-reconfigure -plow unattended-upgrades
VLC 自動起動
ラズパイの電源を入れた際に、VLCが自動起動するように仕掛けます。
sudo vim /lib/systemd/system/kiosk.service
ファイルの中身はこんな感じです(chromiumの時と一緒です)。
[Unit]
Description=Chromium Dashboard
Requires=graphical.target
After=graphical.target
[Service]
Environment=DISPLAY=:0
Environment=XAUTHORITY=/home/pi/.Xauthority
Type=simple
ExecStart=/home/pi/dashboard.sh
Restart=on-abort
User=pi
Group=pi
[Install]
WantedBy=graphical.target
起動用のスクリプトを作成します。
sudo vim dashboard.sh
ファイルの中身はこんな感じにしました。これで指定したファイルがフルサイズ(-f)でリピート再生(-R)されます。
#!/bin/bash
/usr/bin/vlc -R -f --video-on-top /home/pi/cat.mp4
スクリプトの実行権限もつけておきましょう。
sudo chmod +x dashboard.sh
VLCのヘルプ
今回、VLCのヘルプを参照して、「-R -f –video-on-top」を指定しました。他のオプションも一応のっけておきます。
VLC media player 3.0.12 Vetinari (revision 3.0.12-1-0-gd147bb5e7e)
利用方法: vlc [オプション] [ストリーム] ...
コマンドライン上で複数のストリームを指定することが可能です。
指定されたストリームはプレイリストにキューイングされます。
最初に指定されたものから順に再生されます。
オプションの指定形式:
--option プログラムの長さを指定するグローバルオプション
-option グローバルオプション --option の一文字バージョン
:option ストリームに直接適用するオプション、前の設定は上書きされます。
ストリームのMRL指定形式:
[[access][/demux]://]URL[#[title][:chapter][-[title][:chapter]]]
[:option=value ...]
複数のグローバルオプション --option は、MRL固有のオプション :option の
組みとして扱われます
複数の :option=value の組みが指定可能です。
URLの指定形式:
file:///path/file プレーンなメディアファイル
http://host[:port]/file HTTP URL
ftp://host[:port]/file FTP URL
mms://host[:port]/file MMS URL
screen:// 画面キャプチャー
[dvd://][device] DVDデバイス
[vcd://][device] VCDデバイス
[cdda://][device] オーディオCDデバイス
udp://[[<source address>]@[<bind address>][:<bind port>]]
ストリーミングサーバーによって送信される
UDPストリーム
vlc://pause:<seconds> 再生を指定された時間で一時停止する特別な指定
vlc://quit VLCを終了させる特別な指定
コアプログラム (core)
オーディオ
--audio, --no-audio オーディオの有効化
(デフォルトで有効)
--force-dolby-surround {0 (自動), 1 (オン), 2 (オフ)}
ドルビーサラウンドの検出を強制
--audio-replay-gain-mode {none,track,album}
再生ゲインモード
--audio-replay-gain-preamp <浮動小数点>
再生プリアンプ
--audio-replay-gain-default <浮動小数点>
デフォルト再生ゲイン
--audio-time-stretch, --no-audio-time-stretch
オーディオのタイムストレッチの有効化
(デフォルトで有効)
--audio-filter <文字列> オーディオフィルター
--audio-visual {any,visual,glspectrum,none}
オーディオの視覚化
ビデオ
-f, --fullscreen, --no-fullscreen
全画面ビデオ出力
(デフォルトで無効)
--video-on-top, --no-video-on-top
常に手前に表示
(デフォルトで無効)
--video-wallpaper, --no-video-wallpaper
壁紙モードの有効化
(デフォルトで無効)
--video-title-show, --no-video-title-show
ビデオにメディアタイトルを表示
(デフォルトで有効)
--video-title-timeout <整数>
ビデオタイトルを表示する時間(ミリ秒)
--video-title-position {0 (中央), 1 (左), 2 (右), 4 (上), 8 (下), 5 (左上), 6 (右上), 9 (左下), 10 (右下)}
ビデオタイトルの位置
--mouse-hide-timeout <整数>
カーソルと全画面表示コントローラーを隠すまでの
時間(ミリ秒)
スナップショット:
--snapshot-path <文字列> ビデオスナップショットのディレクトリ(またはフ
ァイル名)
--snapshot-prefix <文字列> ビデオスナップショットファイル名のプレフィック
ス
--snapshot-format {png,jpg,tiff}
ビデオスナップショットの形式
--snapshot-preview, --no-snapshot-preview
ビデオスナップショットを表示
(デフォルトで有効)
--snapshot-sequential, --no-snapshot-sequential
ファイル名にタイムスタンプの代わりに連番を使用
(デフォルトで無効)
ウィンドウプロパティ:
--crop <文字列> ビデオクロッピング
--custom-crop-ratios <文字列>
カスタムのクロッピング比率リスト
--aspect-ratio <文字列> ソースのアスペクト比
--autoscale, --no-autoscale
ビデオ自動スケーリング
(デフォルトで有効)
--custom-aspect-ratios <文字列>
カスタムのアスペクト比リスト
--deinterlace {0 (オフ), -1 (自動), 1 (オン)}
デインターレース
--deinterlace-mode {auto,discard,blend,mean,bob,linear,x,yadif,yadif2x,phosphor,ivtc}
デインターレースモード
--video-filter <文字列> ビデオフィルターモジュール
--video-splitter <文字列> ビデオ分割モジュール
サブピクチャー
オンスクリーンディスプレイ(OSD):
--spu, --no-spu サブピクチャーの有効化
(デフォルトで有効)
--osd, --no-osd オンスクリーンディスプレイ(OSD)
(デフォルトで有効)
字幕:
--sub-file <文字列> 字幕ファイルを使用
--sub-autodetect-file, --no-sub-autodetect-file
字幕ファイルの自動検出
(デフォルトで有効)
--sub-text-scale <整数 [10 .. 500]>
字幕スケーリング係数
オーバーレイ:
--sub-source <文字列> サブピクチャーソースモジュール
--sub-filter <文字列> サブピクチャーフィルターモジュール
トラック設定:
--audio-language <文字列> オーディオ言語
--sub-language <文字列> 字幕の言語
--menu-language <文字列> メニュー言語:
--preferred-resolution {-1 (利用可能な最高値), 1080 (フルHD (1080p)), 720 (HD (720p)), 576 (標準の解像度(576、または480ライン)), 360 (低い解像度(360ライン)), 240 (かなり低い解像度(240ライン))}
優先するビデオの解像度
再生制御:
--input-repeat <整数 [0 .. 65535]>
入力ストリームの繰り返し
--input-fast-seek, --no-input-fast-seek
高速シーク
(デフォルトで無効)
--rate <浮動小数点> 再生速度
デフォルトデバイス:
--dvd <文字列> DVDデバイス
--vcd <文字列> VCDデバイス
詳細設定:
--input-title-format <文字列>
再生中メディアのタイトル変更
入力
--stream-filter <文字列> ストリームフィルターモジュール
プレイリスト
パフォーマンスオプション:
-Z, --random, --no-random ファイルをランダムに再生
(デフォルトで無効)
-L, --loop, --no-loop すべてをリピート
(デフォルトで無効)
-R, --repeat, --no-repeat 再生中タイトルをリピート
(デフォルトで無効)
--play-and-exit, --no-play-and-exit
再生と終了
(デフォルトで無効)
--play-and-stop, --no-play-and-stop
再生と停止
(デフォルトで無効)
--start-paused, --no-start-paused
最初のフレームで一時停止
(デフォルトで無効)
--playlist-autostart, --no-playlist-autostart
自動的に開始
(デフォルトで有効)
--playlist-cork, --no-playlist-cork
オーディオ通信の一時停止
(デフォルトで有効)
--media-library, --no-media-library
メディアライブラリを使用
(デフォルトで無効)
--playlist-tree, --no-playlist-tree
プレイリストのツリー表示
(デフォルトで無効)
--open <文字列> デフォルトのストリーム
--auto-preparse, --no-auto-preparse
項目の自動的な事前解析
(デフォルトで有効)
--preparse-timeout <整数> 予備解析のタイムアウト
--metadata-network-access, --no-metadata-network-access
メタデータのネットワークアクセスを許可
(デフォルトで有効)
--recursive {none,collapse,expand}
サブディレクトリの振る舞い
--ignore-filetypes <文字列>
除外する拡張子
--show-hiddenfiles, --no-show-hiddenfiles
隠しファイルを表示
(デフォルトで無効)
-v, --verbose <整数> メッセージの出力レベル(0,1,2)
--pidfile <文字列> ファイルにプロセスIDを書き込む
--advanced, --no-advanced 詳細設定オプションを表示
(デフォルトで無効)
--interact, --no-interact 対話的なインターフェース
(デフォルトで有効)
-I, --intf <文字列> インターフェースモジュール
--extraintf <文字列> 拡張インターフェースモジュール
--control <文字列> 制御インターフェース
ホットキー
--hotkeys-y-wheel-mode {-1 (無視), 0 (音量の制御), 2 (再生位置の制御), 3 (再生位置制御を反転)}
マウスホイールの垂直軸制御
--hotkeys-x-wheel-mode {-1 (無視), 0 (音量の制御), 2 (再生位置の制御), 3 (再生位置制御を反転)}
マウスホイールの水平軸制御
--global-key-toggle-fullscreen <文字列>
全画面表示
--key-toggle-fullscreen <文字列>
全画面表示
--global-key-leave-fullscreen <文字列>
全画面表示の解除
--key-leave-fullscreen <文字列>
全画面表示の解除
--global-key-play-pause <文字列>
再生/一時停止
--key-play-pause <文字列> 再生/一時停止
--global-key-faster <文字列>
速く
--key-faster <文字列> 速く
--global-key-slower <文字列>
ゆっくり
--key-slower <文字列> ゆっくり
--global-key-rate-normal <文字列>
通常レート
--key-rate-normal <文字列> 通常レート
--global-key-rate-faster-fine <文字列>
少しだけ速く
--key-rate-faster-fine <文字列>
少しだけ速く
--global-key-rate-slower-fine <文字列>
少しだけゆっくり
--key-rate-slower-fine <文字列>
少しだけゆっくり
--global-key-next <文字列> 次へ
--key-next <文字列> 次へ
--global-key-prev <文字列> 前へ
--key-prev <文字列> 前へ
--global-key-stop <文字列> 停止
--key-stop <文字列> 停止
--global-key-jump-extrashort <文字列>
ほんの少し前に戻る
--key-jump-extrashort <文字列>
ほんの少し前に戻る
--global-key-jump+extrashort <文字列>
ほんの少し先に進む
--key-jump+extrashort <文字列>
ほんの少し先に進む
--global-key-jump-short <文字列>
少し前に戻る
--key-jump-short <文字列> 少し前に戻る
--global-key-jump+short <文字列>
少し先に進む
--key-jump+short <文字列> 少し先に進む
--global-key-jump-medium <文字列>
前に戻る
--key-jump-medium <文字列> 前に戻る
--global-key-jump+medium <文字列>
先に進む
--key-jump+medium <文字列> 先に進む
--global-key-jump-long <文字列>
かなり前に戻る
--key-jump-long <文字列> かなり前に戻る
--global-key-jump+long <文字列>
かなり先に進む
--key-jump+long <文字列> かなり先に進む
--global-key-frame-next <文字列>
次のフレーム
--key-frame-next <文字列> 次のフレーム
--global-key-quit <文字列> 終了
--key-quit <文字列> 終了
--global-key-vol-up <文字列>
音量を上げる
--key-vol-up <文字列> 音量を上げる
--global-key-vol-down <文字列>
音量を下げる
--key-vol-down <文字列> 音量を下げる
--global-key-vol-mute <文字列>
ミュート
--key-vol-mute <文字列> ミュート
--global-key-audio-track <文字列>
オーディオトラックの切り替え
--key-audio-track <文字列> オーディオトラックの切り替え
--global-key-audiodevice-cycle <文字列>
オーディオデバイスの切り替え
--key-audiodevice-cycle <文字列>
オーディオデバイスの切り替え
--global-key-subtitle-revtrack <文字列>
字幕トラックの切り替え順を反転
--key-subtitle-revtrack <文字列>
字幕トラックの切り替え順を反転
--global-key-subtitle-track <文字列>
字幕トラックの切り替え
--key-subtitle-track <文字列>
字幕トラックの切り替え
--global-key-subtitle-toggle <文字列>
字幕切り替え
--key-subtitle-toggle <文字列>
字幕切り替え
--global-key-program-sid-next <文字列>
次のプログラムサービスIDを切り替え
--key-program-sid-next <文字列>
次のプログラムサービスIDを切り替え
--global-key-program-sid-prev <文字列>
前のプログラムサービスIDを切り替え
--key-program-sid-prev <文字列>
前のプログラムサービスIDを切り替え
--global-key-aspect-ratio <文字列>
ソースのアスペクト比の切り替え
--key-aspect-ratio <文字列>
ソースのアスペクト比の切り替え
--global-key-crop <文字列> ビデオのクロッピングの切り替え
--key-crop <文字列> ビデオのクロッピングの切り替え
--global-key-toggle-autoscale <文字列>
自動スケーリングの切り替え
--key-toggle-autoscale <文字列>
自動スケーリングの切り替え
--global-key-incr-scalefactor <文字列>
スケーリング係数の増加
--key-incr-scalefactor <文字列>
スケーリング係数の増加
--global-key-decr-scalefactor <文字列>
スケーリング係数の減少
--key-decr-scalefactor <文字列>
スケーリング係数の減少
--global-key-deinterlace <文字列>
デインタレースの切り替え
--key-deinterlace <文字列> デインタレースの切り替え
--global-key-deinterlace-mode <文字列>
デインターレースモードの切り替え
--key-deinterlace-mode <文字列>
デインターレースモードの切り替え
--global-key-intf-show <文字列>
全画面表示モードでコントローラーを表示
--key-intf-show <文字列> 全画面表示モードでコントローラーを表示
--global-key-wallpaper <文字列>
ビデオ出力の壁紙モードの切り替え
--key-wallpaper <文字列> ビデオ出力の壁紙モードの切り替え
--global-key-random <文字列>
ランダム再生
--key-random <文字列> ランダム再生
--global-key-loop <文字列> 通常再生/ループ/リピート
--key-loop <文字列> 通常再生/ループ/リピート
--global-key-zoom-quarter <文字列>
1:4 1/4
--key-zoom-quarter <文字列>
1:4 1/4
--global-key-zoom-half <文字列>
1:2 1/2
--key-zoom-half <文字列> 1:2 1/2
--global-key-zoom-original <文字列>
1:1 オリジナル
--key-zoom-original <文字列>
1:1 オリジナル
--global-key-zoom-double <文字列>
2:1 2倍
--key-zoom-double <文字列> 2:1 2倍
ジャンプする長さ:
--extrashort-jump-size <整数>
ほんの少し戻ったり、進んだりする長さ
--short-jump-size <整数> 少し戻ったり、進んだりする長さ
--medium-jump-size <整数> 戻ったり、進んだりする長さ
--long-jump-size <整数> かなり戻ったり、進んだりする長さ
--bookmark1 <文字列> プレイリストのブックマーク1
--bookmark2 <文字列> プレイリストのブックマーク2
--bookmark3 <文字列> プレイリストのブックマーク3
--bookmark4 <文字列> プレイリストのブックマーク4
--bookmark5 <文字列> プレイリストのブックマーク5
--bookmark6 <文字列> プレイリストのブックマーク6
--bookmark7 <文字列> プレイリストのブックマーク7
--bookmark8 <文字列> プレイリストのブックマーク8
--bookmark9 <文字列> プレイリストのブックマーク9
--bookmark10 <文字列> プレイリストのブックマーク10
-h, --help, --no-help VLCのヘルプの表示(--advancedと--help-verboseを
組み合わせ可能)
(デフォルトで無効)
-H, --full-help, --no-full-help
VLCとそのモジュールの網羅的なヘルプ
(デフォルトで無効)
--longhelp, --no-longhelp VLCとすべてのモジュールのヘルプの表示(--advanc
edと--help-verboseを組み合わせ可能)
(デフォルトで無効)
--help-verbose, --no-help-verbose
ヘルプ表示の際の冗長表示
(デフォルトで無効)
-l, --list, --no-list 有効なモジュールの一覧を表示
(デフォルトで無効)
--list-verbose, --no-list-verbose
詳細情報を伴って有効なモジュールの一覧を表示
(デフォルトで無効)
-p, --module <文字列> 特定モジュールのヘルプを表示
(--advancedと--help-verboseオプションを組み合
わせ可能)モジュール名のプレフィックスに一致す
るものを表示
--ignore-config, --no-ignore-config
すべての設定オプションを読み込まない、また、設
定を保存しない
(デフォルトで有効)
--reset-config, --no-reset-config
現在の設定を既定値にリセットする
(デフォルトで無効)
--reset-plugins-cache, --no-reset-plugins-cache
現在のプラグインキャッシュをリセット
(デフォルトで無効)
--version, --no-version バージョン情報の表示
(デフォルトで無効)
--config <文字列> 別の設定ファイルを使用
注釈: --advancedをコマンドラインに付加すると詳細設定オプションが表示されます。
包括的なヘルプを表示するためには、'-H'オプションを指定してください。
液晶が使えるように設定する
config.txtを修正します。vimでもnanoでもお好きなエディタをご利用ください。
$ sudo cp /boot/config.txt /boot/config.txt.org
$ sudo vim /boot/config.txt
config.txtの一番下に追記します。
hdmi_cvt 2048 1536 40 1 0 0 1
hdmi_ignore_edid=0xa5000080
hdmi_drive=2
hdmi_group=2
hdmi_mode=87
hdmi_pixel_encoding=2
framebuffer_width=2048
framebuffer_height=1536
再起動すると、無事に繋がりました。
ふーちゃんの反応
いつもご飯を食べている場所に仮置きしてみました。「最初は変なものが来た」って感じで近寄りませんでしたが、鳥を認識したようでがっつり見ていました。
iPhoneで同じ動画を見せると、画面をタッチしますが、サイズが大きいとタッチしませんね。テレビでも同じです。ひょっとしたら、スマホは「タッチで操作するもの」、テレビは「タッチしないもの」と認識できているのかもしれません。非常に面白いです。
よかったら、動画もごらんください。