【2020年12月改訂】Raspberry PiでRadikoの自動録音サーバーを作る

NAS & Server

JUNKやANN等の深夜ラジオが好きでいつも聴いているのですが、深夜にリアルタイムで聴くのは難しいので、録音して仕事中とか運動するときとかに聴いています。そのため毎週の放送を自動で録音できる環境を構築するためにRaspberry Piを購入しました。

SPONSOR LINK

Raspberry Piを使って録音する

毎週聴いているラジオを何とか録音できる方法がないかと調べてたどり着いたのがパソコンで録音する方法。Windowsでらじれこというアプリで録音することもできますが、PCを起動している必要があるので、常時起動しても省エネなRaspberry Piを使う方法を選択しました。録音のためにメインのパソコンに電源を入れなくてもいいので毎日のようにラジオを録音するならおすすめの方法です。

必要なもの

まずはRaspberry Pi本体。ケースやケーブルもついてるスターターキットが便利です。こんなに小さいのにHDMI、USB×4、有線LAN、無線LANもついてる。
私が使っているのはRaspberry Pi 3ですが、最新のRaspberry Pi 4でももちろんできます。

OSをインストールするためのmicroSDカード。容量は16GBでも余裕なくらいですが安いので32GBにしました。

あとは初期セットアップ用に適当なキーボードとマウス、そしてモニタとHDMIケーブル。

Raspberry PiへOSのインストール

インストールや初期設定はこちらを参考にしました。

Raspberry Pi 初回設定(購入 + OSインストール + セキュリティ設定)- Qiita

Raspberry Piのダウンロード

Raspberry PiのサイトからOSをダウンロードします。とりあえずNOOBSってやつをダウンロードすればOK。

Download NOOBS for Raspberry Pi
Download NOOBS - a straightforward way to install Raspbian, LibreELEC, and other operating systems on your Raspberry Pi.

microSDをフォーマット

SDカードフォーマッターであらかじめmicroSDをフォーマットしておきます。

Raspberry Piのインストール

ダウンロードしたNOOBSの中身をmicroSDの中へコピーしRaspberry Piへ取り付けます

マウスとキーボード、USB電源ケーブル、そしてHDMIケーブルをモニタにつなぎます。USB電源ケーブルはパソコン等のUSBポートだと電力不足になりがちなのでスマホの充電器など電源から直接つなげるUSBポートにつなげます

電源を入れるとすぐにインストール画面になります。
画面下の言語設定で日本語を選択し、Raspbian Fullを選択してインストールします。ここでWiFiに接続してネットワーク経由でインストールすることもできます。

10分~20分程度でインストールは終了します。

その後デスクトップが表示され、ウィザードに従って設定すればインストールは終了です。めちゃくちゃ簡単。

Office系とか開発用のアプリケーションがいろいろ入っていてディスクの無駄なのでいくつか削除しました。

リモートデスクトップの設定

とりあえずマウスとキーボード、モニタをつないで初期設定をしましたが、今後はWindowsからリモート接続して操作したかったのでリモートデスクトップ接続ができるアプリケーションをインストールしました。

Windowsパソコンからraspberrypi3にリモートデスクトップで接続する – Qiita

sudo apt-get update
sudo apt-get install xrdp
cd /etc/xrdp/
sudo wget http://w.vmeta.jp/temp/km-0411.ini
sudo ln -s km-0411.ini km-e0010411.ini
sudo ln -s km-0411.ini km-e0200411.ini
sudo ln -s km-0411.ini km-e0210411.ini
sudo service xrdp restart

Linuxはふわっとしか覚えてないので書かれたまま実行しました。

Windowsのリモートデスクトップ接続からRaspberry PiのIPアドレスを入力して上記画面が表示されれば成功です。以降はキーボードやマウスは必要なくなります。

Radikoの録音設定

録音に必要なパッケージをインストールします。

sudo apt-get install libxml2-utils libav-tools ffmpeg

2020年12月よりrec_radiko.shが使えなくなりました

Radikoが11月末でFlashのサポートを終了したため、以前のrec_radiko.shは使えなくなりました。
代わりにradi.shがリリースされています。
gitから録音スクリプトをダウンロードします。

git clone https://github.com/uru2/radish.git

場所は/home/piにradi.shを保存しました。そのままだと使えないのでパーミッションで実行権限を付与します。

/home/pi/radi.sh -t radiko -s LFR -d 1 -o “/home/pi/音楽/test.m4a”

試しに上記のように1分程度録音して動作確認をします。
radi.shでの録音はRadikoの配信形式と同じフォーマットで保存するため、別形式へのエンコードはできないようです。

crontabで自動録音設定をする

適当な場所(ここでは/home/pi/ドキュメント)に新規ファイルを作り名前をradiko.txtにします。エディタで開いて録音する設定を書き込みます。

# ANN
0 3 * * 4 /home/pi/radi.sh -t radiko -s LFR -d 90 -o "/home/pi/音楽/佐久間宣行のオールナイトニッポン0_$(date "+%Y-%m-%d").m4a"
0 1 * * 7 /home/pi/radi.sh -t radiko -s LFR -d 120 -o "/home/pi/音楽/オードリーのオールナイトニッポン_$(date "+%Y-%m-%d").m4a"

# JUNK
0 1 * * 2 /home/pi/radi.sh -t radiko -s TBS -d 120 -o "/home/pi/音楽/JUNK 伊集院光・深夜の馬鹿力_$(date "+\%Y-\%m-\%d").m4a"
0 1 * * 5 /home/pi/radi.sh -t radiko -s TBS -d 120 -o "/home/pi/音楽/JUNK おぎやはぎのメガネびいき_$(date "+\%Y-\%m-\%d").m4a"
0 1 * * 6 /home/pi/radi.sh -t radiko -s TBS -d 120 -o "/home/pi/音楽/JUNK バナナマンのバナナムーンGOLD_$(date "+\%Y-\%m-\%d").m4a"

上記の設定は、
分 時 日 月 曜日 実行ファイル -t 録音対象サイト -s チャンネル -d 録音時間(分) -o ファイル名
の順に並んでいます。
例えばオードリーのオールナイトニッポンなら、土曜日25:00~27:00なので、月曜日を0として7番目の曜日である日曜日の1時0分にLFR(ニッポン放送)を120分録音して「オードリーのオールナイトニッポン_(日付).m4a」という名前で/home/pi/音楽に保存するという設定です。

テキストファイルに書き込んだら、

crontab /home/pi/ドキュメント/radiko.txt

で読み込みます。
テキストファイルをWindowsで編集する場合は改行コードがCR+LFにならないように注意。

タイムシフトを保存する

実はわざわざリアルタイムで録音しなくても、タイムシフトを保存するもっと簡単な方法があります。
それがrec_radiko_ts.sh

/home/pi/rec_radiko_ts.sh -s TBS -f 202012190100 -t 202012190300 -o "/home/pi/音楽/JUNK バナナマンのバナナムーンGOLD_$(date "+\%Y-\%m-\%d").m4a"

こんな風に放送局と放送開始・終了時間、ファイル名を指定すれば、その場でダウンロードが始まり数分で完了します。
ということはつまり、

# ANN
40 4 * * 4 /home/pi/rec_radiko_ts.sh -s LFR -f "`date +\%Y\%m\%d`0300" -t "`date +\%Y\%m\%d`0430" -o "/home/pi/音楽/佐久間宣行のオールナイトニッポン0_`date +\%Y-\%m-\%d`"
10 3 * * 7 /home/pi/rec_radiko_ts.sh -s LFR -f "`date +\%Y\%m\%d`0100" -t "`date +\%Y\%m\%d`0300" -o "/home/pi/音楽/オードリーのオールナイトニッポン_`date +\%Y-\%m-\%d`"

# JUNK
10 3 * * 2 /home/pi/rec_radiko_ts.sh -s TBS -f "`date +\%Y\%m\%d`0100" -t "`date +\%Y\%m\%d`0300" -o "/home/pi/音楽/JUNK 伊集院光・深夜の馬鹿力_`date +\%Y-\%m-\%d`"
10 3 * * 5 /home/pi/rec_radiko_ts.sh -s TBS -f "`date +\%Y\%m\%d`0100" -t "`date +\%Y\%m\%d`0300" -o "/home/pi/音楽/JUNK おぎやはぎのメガネびいき_`date +\%Y-\%m-\%d`"
10 3 * * 6 /home/pi/rec_radiko_ts.sh -s TBS -f "`date +\%Y\%m\%d`0100" -t "`date +\%Y\%m\%d`0300" -o "/home/pi/音楽/JUNK バナナマンのバナナムーンGOLD_`date +\%Y-\%m-\%d`"

こんな感じで放送終了10分後にタイムシフトを保存する設定にしておけばわざわざリアルタイムで2時間かけて録音する必要は無くなります。
私は後からこのスクリプトを知ったので、これから始めるなら最初からこっち使った方がいいです。

録音データをWindowsやMacと共有する

前にあったGoogle Driveに自動アップロードするスクリプトがもう使えなくなっていたので、今はWindowsに直接マウントして共有しています。共有方法等は下記を参考に。

リモートワークで使えるRaspberry Piで作るファイル共有サーバ 

コメント

  1. 私がやりたいことが紹介されていて録画ができるようになってのですが
    2020/12/3から、エラーが発生し録音できなくなっていました。
    (12/2は録音されてます)
    cron.logを見ると、
     Dec 3 00:00:01 raspberrypi CRON[18035]: (pi) CMD ([18039] /home/pi/rec_radiko.sh FMT 55 /home/pi/radio/fmt “JET_STREAM”)
     Dec 3 00:00:03 raspberrypi CRON[18035]: (CRON) error (grandchild #18039 failed with exit status 1)
     Dec 3 00:00:03 raspberrypi CRON[18035]: (CRON) info (No MTA installed, discarding output)

    となっていて
    直接起動すると、
     failed auth1 process
    となります。

    スクリプトの以下のところでエラーが発生してるようです。

    #
    # access auth1_fms
    #
    wget -q \
    –header=”pragma: no-cache” \
    –header=”X-Radiko-App: pc_ts” \
    –header=”X-Radiko-App-Version: 4.0.0″ \
    –header=”X-Radiko-User: test-stream” \
    –header=”X-Radiko-Device: pc” \
    –post-data=’\r\n’ \
    –no-check-certificate \
    –save-headers \
    -O auth1_fms_${pid} \
    https://radiko.jp/v2/api/auth1_fms

    if [ $? -ne 0 ]; then
    echo “failed auth1 process”
    exit 1
    fi

    ここまではわかったのですが、何が問題なのかがわかりません。
    この問題をどう対処したのか教えてもらえませんか?

  2. 調べてみましたが、どうやらRadikoが11月末でFlashのサポートを終了したことで、rec_radiko.shが使えなくなってしまったようです。
    代わりにradi.shってのがリリースされてます。
    https://github.com/uru2/radish/blob/master/radi.sh

  3. おじゃまします。

    12月のradiko仕様変更により、これまで使っていた録音サーバーが使えなくなり不便していまし
    たので、こちらのタイムシフトのやり方をそのまま活用させていただきました。
    とても助かりました。

    実装していて気になった2点、お節介ながら、お礼を兼ねてお伝えいたします^^;

    1.ファイル名の中の日付フォーマットにエスケープを入れないと、cron動きません。コマンドラインからだとエスケープなくても動くため、切り分けられずにハマりました。

    2.同じく、ファイル名の中の日時分は、サンプルの通りに作ると、cronの起動時間になるので、放送終了10分後となります。放送開始時間をファイル名にする場合、時間の引き算が必要です。

    というわけで、先程本番稼働済サンプルを提示しておきます。

    #月曜21時 虎たま 21時開始 21時15分終了 21時25分ダウンロード
    25 21 * * mon /home/pi/tigers/rec_radiko_ts/rec_radiko_ts.sh -s ABC -f “`date +\%Y\%m\%d`2100” -d 15 -o “/media/pi/tigers/$(date –date “25 minutes ago” “+\%Y-\%m-\%d-\%H\%M”)_’ABC_虎たま'”

    以上 大変お世話になりました。

  4. ファイル名のエスケープが抜けていた箇所を修正いたしました。ご指摘ありがとうございます。

タイトルとURLをコピーしました