あおしまの日記

あおしまさんの日記らしいです。個人的に興味がある事を時々書きます。スマートウォッチPebble日本語パックを作成、公開しています。

RaspberryPiを使った動画再生ボックス製作

16:9な動画を流して展示する話が持ち上がり、従来使っていた動画再生ボックスもそろそろ更新するか?という話になったので、いい機会だからRaspberryPiで作ってみようかというのが発端です。
さすがに10年前の4:3映像を今でも流すのも何ですし、流しているテレビはすでにHDMIありの16:9画面なので、自分の頭の体操を兼ねてやって見た記録です。
aoshimak.hatenadiary.jp

条件は?

  • 電気入れたら動画をぐるぐるさせたい。タイマーでブチッと切れたら次回再起動で手間なく管理したい。
  • 全画面で動画を流すので、X動かなくても良い。コンソールで動画流れるならその方が良い。
  • 動画の差し替えが簡単にできる仕組みを考えたい。

機種をどうするか?

RaspberryPi4が出たタイミングなのでもちろんこれにしたかったのですが、2020年6月時点だと諸々の問題点がありました。

動画をどう再生するか問題

  • Raspi3/4は64bit対応OSが出てきたが、コンソール動画再生はVLCに変わっている。CPUパワーで押し切る形だが、動きは良い。ただし発熱すごい。
    • vlcの場合のメリットとしては、m3u形式のプレイリストが使えて、それをループ再生できる。データ領域にplaylistを置いておき、それを指し示して-Lでループさせると便利。-Rだとプレイリストの先頭のものだけ繰り返すので1ファイルの繰り返しになってしまうので注意。
  • Raspi1/2/3は従来の32bitOSを使えて、コンソール動画再生はomxplayerを使用する。素晴らしいライブラリだが、64bit環境には移植されない方向。発熱は少ない。

github.com

  • omxplayerはRaspi1/2/3どれでも、用意した5分/45MBのmpeg4をぬるぬる再生できた。しかし、動画のローディングは機械のCPU能力に比例した。複数動画の切り替わりにはRaspi3の方が向いている。

動画をどう配置するか問題

  • SDカードを使い捨てと割り切って、RaspiのSDカード内に専用区画を作って、そこに動画を置くことにした。
  • 専用区画をFAT32にすることで、このSDカードをパソコンに差し込めば、目的の区画へのファイル出し入れは簡単に行えるようにした。
  • 具体的には、32GBのSDを用意し、RaspiOSを書き込み直後、gpartedなどでOSエリアを後ろ16GBに移動拡張した。
  • すると、boot領域の区画1と、後ろ16GBの区画2の間に、15GB強の領域が設定できる。ここをFAT32の区画3として確保する。(これもgpartedでやった)
  • そのあと、RaspiOSを起動する。
  • ディレクトリ/mnt/dataを作成する。ここにデータ領域をマウントさせたい。
  • /etc/fstabに/dev/mmcblk0p3のマウント情報を書き足す。形式vfat、partuuidXXXXX-03としておくと楽。もちろん自動でマウントさせたい。(noautoつけない)

自動再生のためのお膳立て

  • raspi-configで起動レベルをコンソール+自動ログインに設定。アカウントpiの自動ログイン。キーボード繋がないし、networkも繋がない、普段隠して置く展示機なのでこれで良い。
  • アカウントpiの.bashircの末尾に、動画再生スクリプトの実行のために、sh movieplay.shみたいな行を足しておく。
  • movieplay.shの内容は以下の通り。内容はここから拝借。

nomolk.hatenablog.com

 #!/bin/sh
 
 setterm -cursor off -blank 0
 VIDEOPATH="動画ファイルのディレクトリ" 
 SERVICE="omxplayer"
 
 while true; do
         if ps ax | grep -v grep | grep $SERVICE > /dev/null
         then
                 sleep 1;
         else
                 for entry in $VIDEOPATH/*
                 do
                         clear
                         omxplayer --refresh -o both $entry > /dev/null
                 done
         fi
 done
    • キーボードも繋がないので、省電力設定が働いて表示が出なくなった。対策として、settermの行に-blank 0を足してある。

設置

  • 最終的には手元に余っていたRaspi1(mpeg2アクセルコードあり)を利用することにした。
  • コンセントにタイマーを置き、そこから延長コードで2口に分け、テレビとRaspiにつないだ。
  • HDMIケーブルでRaspi-TVを接続
  • SDカードを差し込んで、起動。
  • 一定時刻になると再生を開始し、一定時刻になると電源が落ちる。

追記

  • 結局Raspi4買っちゃったので、それはそれで、KODI用にセットしてみた記録

  • HDMIケーブルがmicroHDMIになった。変換ケーブルで対応した。
  • 電源がUSB-Cになった。microB-USBC変換コネクタで対応した。
  • 電気を食うデバイスを使わないので、電源は従来から使っている2.1Aのものをそのまま使ったが、KODI動画再生には問題なかった。
  • 2020年6月現在だと、LibreELEC−64bitではRaspi4のCEC対応がない。リモコンを別に用意することになる。今後の対応に期待して待ち。
  • Raspi4は発熱がすごい。ファン導入も検討したが居間に置くので音が出るのはやめた。全身放熱フィンのようなケースを用意した。Amazonに似たようなのが多いので、日本国内から送られる物を探すと良い。*1

  • 同じSDカードをRaspi3に差し込んでもLibreElec−64bitが起動した。こちらはCEC対応もあり、動画再生能力も向上した。32bitの時に比べて、NASにある生TSの倍速再生でストレスがなくなったので、今のところはこれでいいやということになった。

Raspberry Pi 3 Model B V1.2 (日本製) 国内正規代理店品

Raspberry Pi 3 Model B V1.2 (日本製) 国内正規代理店品

  • 発売日: 2016/02/29
  • メディア: Tools & Hardware

*1:自分はAliから買った。5月末〜6月ごろはAmazonに中華からの物品が軒並み品切れ、またはバカ高になっていた。コロナの影響と、大規模な関税脱税の反動で中国→日本の物流が滞っていたタイミングだった模様。それとAmazon側のサクラチェッカー対策での中華出品者のFBA移行が組み合わさって、日本国内の在庫がなくて軒並み売り切れか、中国発送のものしかない状況に当たってしまっていた。そこで、源流であるAliに探しに行って購入した。6月頭に買って、6月末に到着。

scrapboxのbookmarkletを改造した

scrapboxをブクマ以上web情報蓄積未満として有効活用したいと考えて、scrapboxbookmarkletを改造した。

  • 日付を入れた箇条書きのために先頭に空白を入れてある
  • 日付、タイトルで1行、なぞった部分のテキストをcode:txtで囲ってその下に格納する
  • 1ブクマ1ページではなく、bookmarkというページに追記していく形式
    • 必要だったらなぞってNewPageすれば個別ページにできるので、自分的にはこれでよい。

コードは以下の通り。改行を取って数珠つなぎにしてbookmarkletにすると動作する。
最後の出力行のURLを自分の使っているscrapbox名に書き換えること。

 javascript:(function(){
 var title=document.title.replace('[','').replace(']','');
 var url=window.location.href;
 var lines=['','['+url+']'];
 var quote=window.getSelection().toString();
 if (quote.trim()){
 lines=lines.concat('code:txt');
 lines=lines.concat(quote.replace('\r','').split(/\n/g).map(function(line){return ' '+line}));
 }
 lines.push('');
 var body=encodeURIComponent(lines.join('\n'));
 
 var dt = new Date();var year = dt.getFullYear();var  month = ("0"+(dt.getMonth() + 1)).slice(-2);var  date =  ("0"+dt.getDate()).slice(-2);var makedate = year+'-'+month+'-'+date;
 
window.open('https://scrapbox.io/(scrapbox名)/bookmark'+'?body= '+makedate+' : '+title+body);}
 
 })();


サイト名やURL、条件によって、追記先を分けようと思えば分けることもできるので、分野ごとのページなどに分けると便利だったりします。

ScrapboxにInterWikiっぽいものを入れてみた

過去Wikiデータの再活用

別のscrapboxページに過去のWIkiデータをimportしたものを持っているのだが、その時点でInterWikiがリンクにならない事が不便であった。

aoshimak.hatenadiary.jp
aoshimak.hatenadiary.jp


特に、本の情報にAmazonのリンクと書影をつけていたのが、すぐ飛べない、書影が出てこないのがどうにも惜しい。そこで、とりあえずjavascriptってそれ何おいしいの?というレベルの自分ですが、UserScriptという仕組みを使ってそれっぽい事が出来るか挑戦してみた記録です。

InterWikiとは?

InterWikiとは、Wiki間の相互リンクを簡便化する仕組みです(でした)。例えば「Wikipedia:日本」と書き込むと、InterWikiNameページ内の定義リストを使って内部的に「URL+引数」に書き換えられたリンク( https://ja.wikipedia.org/wiki/日本 )が生成され、これをクリックすると当該ページに飛ぶ事ができた。他の用法としては、他WIkiのページに飛ぶときに、エンコードされたページ名を含むフルURL等だと可読性に乏しく、入力も楽になるために便利に使われた。

また個人的には、「URL+引数」の自動変換で他の一義的なリンクが生成できることから、検索や商品サイト等へのリンク、特に書籍が絡むメモでAmazonのページやGoogleの検索結果へのジャンプを積極活用していた。そうした補完を前提とした形式で記述された記録が手元に残っているが、scrapboxにはInterWikiのようなリンクの自動生成機能がないため、これをUserScriptで補うことで、昔の記録のリンク情報等を再活用したい。

コード

とりあえず、Amazonへのリンク変換を作ってみよう、ということで、右も左も分からないながら作ってみた。
前提として、以下のような記法のデータがあるものとする。Scrapbox内では[]で囲われているが該当するページは無いため、empty-page-linkである事が前提でコードを書いてある。

[Amazon:4-756-10120-8]

Scrapboxで動作させるには、自分ページを作り、そこにscript.jsとして貼り付け、リロードすることで、自分だけにScrapboxに作用するようになる。

現状では課題も多い(後述)

  $('a:contains(Amazon:).empty-page-link').each(function() {
  	//リンクからISBN番号を取得
     var str = $(this).attr('href').replace(".", "").replace("/", "").replace("-", "").replace(/Amazon:(.*)/g, "$1");
  
  	//AmazonのURLを生成
 		var amaurl = "http://www.amazon.co.jp/exec/obidos/ASIN/"+ str ;
 		var img = 'http://images-jp.amazon.com/images/P/'+str+'.09.TZZZZZZZ.jpg';
 	
 		var imgsrc = '<img class="image" src=' + img + ' >';
 		
     //上記で格納した文字列で上書き
     $(this).attr('href', amaurl);
     $(this).text('Amazon-'+str);
     // $(this).html(imgsrc);
 	});

課題

  • javascriptまだまだよくわからん
  • scrapboxの中身もよくわからん
    • これにまつわる事だが、リンク近くをクリックすると書き換えたリンクが元に戻ってしまう問題(重大)
  • 書影出せない問題
  • 他のInterWikiNameに拡張したいけど、汎用性を持たせられないか?
  • InterWikiNameのページを読み込んで、自動変換すれば完璧だが、今の自分にその技術はない。
  • Amazonの書影を取ってきて埋め込みたいが、ASIN一義で画像が取って来れなくなったので、敷居がすごく高くて自分では難しそう。
  • Amazonから書籍メモをscrapboxに貼り付けるbookmarkletのコードをどう活用すれば良いのだろうか?

自作カレンダーについてのまとめ

カレンダーを自作して6年目になりました

2015年に致し方なく始めた自作カレンダー作りも、気が付いたら6回目になりました。

aoshimak.hatenadiary.jp

基本的には自宅、勤務先、身内の欲しい人に配るだけに作っていました。
毎年数枚余るので、今年ははじめて、メルカリでも頒布する事にしました。
余るよりマシかな?と思って、ほぼ実費でお配りしている状態ですが、ありがたい事に数枚出て行きました。
毎年SNSには画像をあげていたんですが、こちらでは特に何も出していませんでしたので、これを機会に
まとめてみる事にしました。

大まかな設計方針

初回の設計方針は以下でした。

  • 数字は手持ちフォントで見やすいということで小塚ゴシックを中心に使用
  • 枠の色合いを暖色系に
  • 西暦と和暦をひと目で見てわかるように(今年は平成何年だっけ?とよく思うので)
  • 土曜日曜祝日を赤青で色分け(本家は青のみ)
  • 仕事上、六曜は欲しい
  • 満月新月の日は把握したい
  • 月末のはみ出た日を/でまとめない

その後、以下の問題がありまして、翌年からは少し方針転換をします。

  • A2/A3で作り分けをすると高い。特にA2の単独印刷は高くつく。
    • A2の時の文字の大きさをA3に詰めたら、A3用デザインひとつで済む
  • アラベール高い。湿気でよれる。
    • 湿気に強く、風合いの良い紙をということで、ここ数年はグランヌーボーに落ち着いています。
  • 六曜は遠くから見たときに日付を見る邪魔にならないように、近くで確認したらわかる程度に。
  • 新月、満月だけで充分で、その中間は要らない。
  • 外枠は明るい2色の濃淡で選んでましたが、2019からは開運カラー?を2つ選んで組み合わせる形に

歴代カレンダー画像

この6年のカレンダーをまとめてみました。
f:id:aoshimak:20200202102622j:plain

2020年のカレンダー

f:id:aoshimak:20191207143245j:plain
f:id:aoshimak:20191207143213j:plain

今年もカレンダーを自作しました。
毎年余っているので、今年はメルカリさんで売ってみる事にしました。
送料込みで300円です。(メルカリの最低出品価格が300円なので)

ご興味がある方はこちらからどうぞ。
https://www.mercari.com/jp/items/m82465863790/

追記

丸めて定形外郵便で送る方針に変えました。
その為、送料が嵩みまして、400円での販売に変わりました。
ありがたい事に、数枚売れました!びっくりです。
まだあります。

Pebble Time Steelの修理

Pebble Time Steelの修理について

細々と実験を行っていまして、Pebble Time Steelの修理方法に一定の目途が立ちました。(n=4ぐらい)
1つ目は3ヶ月運用済、2つ目は1ヶ月運用中で装着中です。
電池を交換して、蓋を再封止しています。*1

そこで、ご要望の方の修理を受け付けてみようかとも考えましたが、実験で色々な状態の機械を開けて
みて思うに、時計側にはいろいろなリスクがある事も見えてきました。

  • 充電が悪くて電源回路がいかれてる
  • 液漏れで回路がいかれ(ry
  • 浸水で回路がいか(ry
  • 汗やらでボタンがい(ry

あと、以下の要素も見逃せません。

  • 修理中に私が壊す(笑)

もし修理を受け付けるとなると、送っていただいて返送することになりまして、以下のトラブルも起こり得ます。

  • 運送中の紛失、損壊

という訳で、二の足を踏んでいる所です。

*1:電池は非売品をサンプルで取っています。

PX-Q3PE4再導入

PX-Q3PE4を入れた全録マシンを作成していたのですが、どうにも録画が終わらないゾンビプロセスが出たり、録画したファイルが再生できなかったり(録画ファイルにデータが入っているもの、0バイトで終わってるもの、の両方あり)が頻発したので、今年に入ったあたりから電源を落として使っていませんでした。

しかし、先日「ひろゆきチューナー」がゴメンナサイになったので、じゃあ他に何があるの?と探したところ、非公式ドライバが出ていたのに気付いて、死んでたマシンが生き返りそうだなと思ったので、突貫でシステムの改善とOSの差し替えを行いました。その時のメモです。
参考はこのあたり。
www.jifu-labo.net

ハードウェア的な改善

ハードウェア的な話で先達の話を見ていると、「ノイズで落ちる」という話がよく出てきます。
このマシンはDC電源を使ったマシンなので、まずはACアダプタからのラインにフェライトを噛ましてみました。

次に、ボードの上にはHDDが覆いかぶさっていましたので、それを抜いてみました。(もともと4TBx2だったのを、4TBx1に変更。)
また、チューナー付近に走る配線を見てみますと、HDaudioの線がありました。
音声を前パネルから出すのは特に使っていませんし、これもノイズ源かなと思い、引っこ抜きました。

そしてチューナーから内部USBに入れる信号線は、小型フェライトを噛ませたうえで、ケースパネル沿いを這わすことにしました。

またこれを機会に、CPUファンの掃除も行いました。

ソフト的な改善

今回の目玉は、非公式ドライバに差し替える事です。
github.com

これだけではすっきりしませんし、ついでに固定化されていたカーネルも含め、システム総入れ替えで更新しました。
Ubuntu18.04.3LTSのserverです。

その上で非公式ドライバの作業、ボードの認識、更にはMirakurun、Chinachu、と順番に入れていきます。
PX-Q3PE4の最新Windowsドライバ1.4からsysファイルを持ってきて、firmwareを抽出しました。*1
抜くのには非公式ドライバセット中にあるfwtoolをmakeして利用。

はまりどころは以下。

  • fwtoolはfwinfo.tsvを参照して居るので、これとsysファイルを一緒の場所に置いて実行する。(fwinfo.tsvがないよというエラーが出る。)
  • 抜いたfirmwareはpx4_drv.koが決めうちで読みにいくので、ファイル名をit930x-firmware.binにしなければならない。(W3U4で試したものと区別するのに、ファイル名を勝手につけていた。)
    • その結果、名前を別にしていたので、デバイスが認識しないのに気がつく。
    • dmesgで「探したけどfirmwareないよ」というエラーがあって、ファイル名変えちゃいけない事に気が付く。
    • そこで、firmwareファイルは名前をit930x-firmware.binとし、/lib/firmware/以下に置く事で解決した。

その上で、残りファイルをコンパイルして導入しました。
再起動しますとデバイスも無事認識しまして、あとはChinachu γの導入手順に従ってやっていくだけでした。

結果

  • 地上波4番組の同時録画で問題なし。
  • 2局の全録で一晩置いても問題なし。
  • 2局全録中に1番組or2番組の追加手動録画を入れてもドロップ無し。

結果としては万々歳でした。

考察

改善した原因を考えた。

  • HDDを1台減らしたことによる電源安定化
  • CPUファンの性能回復
  • ノイズ源の除去
  • OSのアップデートによる改善
  • 非公式ドライバによる改善

今後の対策

  • チューナーボード周囲に電磁遮蔽を立てる
  • グランド強化
  • Mirakurunメモリ喰いなのでメモリ増強

こんなところでしょうか?