lond日記

思ったことを気まぐれに書きます。

Raspberry Pi 2 でRadiko 録音 (ガジェット) (ラジオ)

QNAP NAS TS-212Pを導入した目的の一つであるradiko録音は私にはちょっと難しい(時間がかかる)感じだったので、代わりの手段としてRaspberry Pi 2を導入してみました。

f:id:a-londenion:20160708151601j:plain

Linuxに詳しい訳ではないので出来るだけ少ない作業で導入するのが目標です。

1.Raspberry Pi2のセットアップ
※事例はたくさんあるので省略。


2.NASのマウント

録音したファイルはNASに保存したいので起動時にマウントするのですが、これがなかなか上手く行きませんでした。最初にテストでセットアップした時はマウントできていたのですが、改めてセットアップしたところ起動時にはマウントできず起動後に手動でコマンドを打つとマウントされる状態でした。(パッケージやファームを更新したりしたのが関係あるのかもしれません)

dmesgで見ると以下のエラー
CIFS VFS: Error connecting to socket. Aborting operation
CIFS VFS: cifs_mount failed w/return code = -101

起動のタイミングとマウントするタイミングが合っていないエラーらしく、対策はいくつかネットで見かけたのですがどれもうまく行きませんでした。(書いてあるのはエラーが出てもマウントはできているというものでしたが、私の場合は結果的にマウントできておらず状況が違うのだろうと思います。)

結果的にこちらのサイトで見かけた方法で解消しました。

qiita.com


fstabの表記を変更してきちんと接続されるようになりました。
//192.168.1.xx/public /mnt/nas cifs username=xxx,password=xxx,iocharset=utf8,rw,uid=1000,gid=1000,noauto,x-systemd.automount 0 0

現行バージョンのLinuxでは起動時のマウント失敗に対する取り扱いがより厳密になり、リムーバブルディスク等は"noauto" または "nofail" を付ける事を推奨ということのようです。(defaultsにしていた。) x-systemd.automount ファイルシステムに合わせて設定を行うもののようですが正直よくわかりません。。

2016.7.15 追記:
マウントできていたのですが学習もかねて再セットアップをしたら繋がらなくなりました。今度は起動時マウントできずディレクトリにアクセスしようとするとタイムアウト的にエラーが出る感じ。起動後に「mount -a」すればマウントできます。仕方がないので、/etc/rc.localに「sudo mount -t cifs -o username=xxx,password=xxx, //192.168.0.xx/public /mnt/nas」と書いたスクリプトの実行を追加し起動後にマウントさせることにしました。

2016.09.01 追記:
起動時にデスクトップが立ち上げるように設定したままだったのですがsshでしか接続しないので設定を外した所、起動時の上記スクリプトではタイミングが速すぎて同様に接続できません。上記のコマンドの前に「sleep 20」を付けてマウントのタイミングを遅らせることにしました。


3.Radiko録音に必要なファイルの導入と設定
必要なファイルと導入についてはこちらを参考にさせていただきました。


Raspberry Piでradikoの再生、録音 - Muchuu


導入パッケージ: rtmpdump、swftools、libxml2-utils (再生関連は不要なので入れない)
シェルスクリプト: radiko.sh

他にffmpegが必要で、リポジトリを追加すればインストールできるようなのですが、本来はパッケージには含まれずソースからビルドしないといけないようです。このため代替として avconv (パッケージはlibav-tools)を使うこととしました。(Linuxはffmpegからavconvに切り替えたけど今後は再びffmpegに戻るみたいです。)

こちらを参考にさせていただき、radiko.shのffmpegの記述をavconvに変更するだけで動きました。

qiita.com


コマンドからなら「./radiko.sh TBS」と打てば1分の録音ファイルがAACで保存されます。ファイル名や保存先、録音時間等をオプションで指定可能です。

MP3に変換するとファイルサイズが大きくなるので、今回使わせていただいたスクリプトがAACで保存するのがありがたいです。AACのプロファイルにより聴けない環境がある (実験的に録音したファイルの1つはiTuinesで開けず別途変換) ようですが取り敢えず使ってみるつもりです。私はRadikoプレミアムには加入していないので少し複雑になるプレミアム対応のスクリプトは今回対象から外しました。



4.cronの設定
確認に一番時間がかかったのはこれでした。
最初テストで導入した際は、「crontab -e」を使ってユーザー毎のcrontabファイルを作らず、root権限でcrontab を修正して反映させる方法を使ったので、改めて導入した際にcrontabへの記述を変える必要があり再度確認になってしまいました。なお、設定する前にMTAを導入が必要です。一時的に/etc/rsyslog.confでcronログを有効にしてcron動作後に送信されてくるメールを見ながら確認しました。

crontabの記述は最終的に以下のような内容で上手くいきました。
59 0 * * 6 /home/pi/radiko.sh -d /mnt/nas -f JUNK\ バナナムーンGOLD `date +%Y年%m月%d日` -t 122 TBS

ファイル名: JUNK バナナマンのバナナムーンGOLD 2016年7月1日.m4a

以下でも動作するのですが、現状では絶対パスで書くべきということでした。
59 0 * * 6 ~/radiko.sh -d /mnt/nas -f JUNK バナナムーンGOLD `date +%Y年%m月%d日` -t 122 TBS


ファイル名のスペースは前に"\"を付けるようです。(\や¥が記事更新で消えてしまうので全角で入力してます。) "`date ~ %m日`" は日付の付加で、-fオプションを使わなければ日付と時間がファイル名になるのですが指定すると日付等は付きません。毎日録音する番組があるとファイル名が被ってしまうため設定しました。

最初に導入した際はffmpegを使ったのですが、iPhoneで聞くとこれまで使っていたWindows用のソフト(Radikool)よりこもった音に聞こえるので、改めて導入した際はavconv にした感じです。違いはないのかもしれませんがとりあえずセットアップはできたので少し試してみたいと思います。

2016.7.15 追記:
起動後にNASをマウントすることになったことでradiko.shの実行も /mnt/nasへの書き込みで失敗するので「sudo  /home/pi/radiko.sh ~」と書き換えました。多分、方法があると思いますがとりあえずの対処。

2016.08.30 追記:
sudo を付けずに実行すると「mv: 通常ファイル `/mnt/nas/xxx.m4a' を作成できません: 許可がありません 」と表示されます。詳しい方なら一発でしょうがmnt/nasに書き込み権限がないための問題でした。ディレクトリに書き込み権限を設定すればsudoとしなくても実行できますね。初心者なりに変に考えすぎて回り道してました。

2016.09.01 追記:
ディレクトリの権限設定ですが一旦権限を設定してもマウントすると権限が書き込み権限が無効になってしまうようです。どうも共有ディレクトリには書き込み権限設定できないようですね。sudoを付けて実行させることにしました。