Raspberry Pi用 radiko 簡易録音スクリプト

2023.10更新 / 2019.1

★あなたも Raspberry Pi で簡単録音生活してみませんか。(^-^)

■動作確認環境

H/W: Raspberry Pi 2 Model B
OS: Raspberry Pi OS (Bullseye)

■できること・できないこと

できること: タイムフリー録音、エリアフリー録音。無劣化録音。mp3変換録音。超簡単に導入(と思う)。
できないこと: リアルタイム録音。NHK第一/第二/FMの録音。 放送を聴く。(別スクリプトで対応↓)

聴取用スクリプトは→こちら  NHK第一/第二/FMの録音は→こちら

■準備

ffmpegが必要なのでインストールします。 以下のコマンドを実行してください。
(インストール済みであれば、この項目は無視してください)

(システムによっては curl が入っていない場合があるので、そのときは同様にインストールしてください)

$ sudo apt install ffmpeg

■設置方法&動作確認方法

[ rec_radiko.tar.gz ] をダウンロードして、適当なディレクトリに置きます。解凍して出来た rec_radiko.sh に実行権限を与えます。

$ tar zxvf rec_radiko.tar.gz
$ chmod +x rec_radiko.sh

テストコマンドを実行し、カレントディレクトリに test_rec.mp3 が出力されれば動作成功です。

$ ./rec_radiko.sh test    ※コマンド実行後1分ほど待つ

※ラジオ日経第二(RN2)のオープニング・ナレーションが1分間録音されます。(2022.12現在)

■テンポラリ領域の確保

本スクリプトでは radiko の受信データを、いったんテンポラリ領域に保存します。
受信データの容量は 60分 あたり 21MB 弱なので、たとえば2時間番組を録音するには 42MB 弱のテンポラリ領域が必要になります。(2020年11月現在)
テンポラリの初期値は /tmp です。 許容量に注意してください。 ($ df -h で確認できます)
必要に応じて rec_radiko.sh ファイルの中にある wkdir の右辺を適当なディレクトリに書き換えてください。

wkdir='/radiko'  (例)

★録音用tmpfsの作り方
/etc/fstab の末尾に次のような一行を追加したのち、 $ sudo mkdir /radiko と $ sudo mount /radiko を順に実行してください。

tmpfs /radiko tmpfs defaults,size=60m,relatime,mode=1777 0 0

■番組設定

番組設定は rec_radiko.sh の中にある、次のような部分にあります。
この例でいうと $ ./rec_radiko.sh baka と打つと、指定の録音が実行されます。

elif [ $pname = 'baka' ]; then
channel='TBS'
savdir="/home/${uname}/radiko/baka"
fname="伊集院光・深夜の馬鹿力 !date!"
hour='010000'
stop='030000'
fndate=1

各項目についてですが、まず channel='XXX' のところは放送局のチャンネル名を指定してください。

チャンネル名は http://radiko.jp/index/ にある各局のアドレス(URL)を見ればわかります。お住まいの地域のチャンネル名を設定してください。たとえばHBCラジオ(北海道・東北)なら HBC になります。

savdir は出力先ディレクトリ、fname はファイル名です。 それぞれ適当に指定してください。

ファイル名は !date! の部分がスクリプトを起動した日付に置換されます。 !date! にスクリプト起動日の前日の日付を入れたい場合は、fndate=1 という行を追加してください。(火曜日午前1時からの番組に月曜日の日付を付けたい場合など)

hourとstopは、開始時刻と終了時刻です。時刻を4桁で指定して、末尾に00を付けてください。計6桁になります。上の例は、01:00~03:00の番組を録音するという設定です。

■起動日について

本スクリプトは、スクリプトを起動した日付を基準に録音するシステムになっています。
なので基本的には、放送日と同じ日付のうちにスクリプトを起動してください

たとえば火曜日の番組を録音するには、火曜のうちに rec_radiko.sh を起動してください。 火曜日01:00-03:00 の番組のために、火曜日 03:25 にスクリプトを起動するとしたら、crontab に次のように記述します。

25 3 * * 2 /xxx/rec_radiko.sh baka >/dev/null 2>&1
※ xxx は rec_radiko.sh を置いたディレクトリまでのパス

以上が基本的な起動手順です。
しかし放送時間が 23:00-24:00 とか 23:00-25:00 のように24時をまたぐ番組だと、スクリプトの起動日が放送日の翌日になってしまいますね。その場合は、基準日を起動日の前日とする設定として brdate=1 という行を番組設定のところに追加してください。
たとえば次の設定で土曜日にスクリプトを起動すると、金曜日の23時から25時の番組を録音することになります。

hour='230000'
stop='250000' ← 日付をまたいだ録音も可能
fndate=1
brdate=1   ← この行を追加する

※brdateの値は増やすことができます。2なら2日前、3なら3日前を基準に 23:00-25:00 を録音できます。
※日付をまたぐときの stop は必ず 240000 以上を指定してください。 たとえば 240000 を 000000 と書くと録音に失敗します。
※fndateの値も同様に増やすことができます。各自確認しながら設定してください。

■時間指定について

時間指定は完全に任意です。たとえば08:30-11:00の番組の最初の30分だけ録音したい場合は、次のように指定して下さい。

hour='083000'
stop='090000' ← 時間は番組表と無関係に指定可能

なおtermという項目を追加して先頭からの秒数を指定すると、番組終了後のCMをstopよりも柔軟にカットすることができます。たとえば30分番組の先頭から27分37秒で切りたい場合には次のように記述してください。 (version1.0で追加した機能)

hour='103000'
stop='105800' ←28分まで録音
term=1657 ← この行を追加して27分37秒(1657秒)を指定

■音質設定・無劣化録音

音質は次の項目で設定できます。 rmodeは出力するファイル形式です。mp3 か m4a を指定してください。

rmode='mp3'
smprate=22050
bitrate='32k'
ac=2

smprate, bitrateはサンプリングレート、ビットレートです。各自で調節してください。

acはステレオかモノラルの指定です。ステレオなら2、モノラルなら1にしてください。(通常は2)

なお無劣化録音したい場合は rmode='raw' としてください。.m4a 形式で無劣化保存されます(AAC 48000Hz stereo 46kbps)。 rawを指定した場合は smprate, bitrate, ac の設定は無視されます。

■指定録音

番組名の後ろに日付を入れると、その日にスクリプトを起動したとみなして録音できます。

$ ./rec_radiko.sh baka 20201103

放送局、日付、開始時刻、終了時刻を直接指定しての録音も可能です。(ファイル名は"放送局 日付 開始時刻"になります)

$ ./rec_radiko.sh TBS 20201103 010000 030000

日付は一桁の数字でも代用できます。 0は今日、3は3日前を指定したことになります。

$ ./rec_radiko.sh baka 3
$ ./rec_radiko.sh TBS 3 010000 030000

■エラーログについて

エラーをログに出力したい場合は、crontabにある【 >/dev/null 2>&1 】の部分を、たとえば次のように変更してください。

>/dev/null 2>>/var/tmp/rec_radiko.log

■その他の注意点

エラーチェックは最低限しかしていません。各項目には常識的な値を入れてください。たとえば時間指定に 009999 など、ありえない数字は入れないでください。
番組終了後、いつから録音可能になるかは放送局の都合によります。番組終了直後は録音できない可能性があります。

■免責

本スクリプトの使用により生じた損害について、当方は責任を負いません。
放送局側の仕様変更により、とつぜん使えなくなる可能性があります。
その場合でも制作者はスクリプト更新の義務を負いません。 あらかじめご了承ください。

◎謝辞

本スクリプトはbluedeer様の録音スクリプト、うる様のradi.shを参考にさせていただいています。

―バージョン情報―

最新版DL  version1.2.2 ラジコプレミアム対応に関するコメント追加。(スクリプトの中身はv1.2.1と変わっていません)

―old ver.―
version1.2.1 auth1ルーチン変更。
version1.1  Ctrl+Cで中断するときの終了処理を追加。テスト録音をラジオ日経第二(RN2)に変更。
version1.0.2 termコマンド追加。番組末尾のCMカットをしやすくした。auth1でX-Radiko-AuthTokenを抜き出す正規表現を調整。
version0.9  サーバ接続のretryのwait秒数を等差級数的に延ばすようにした。エラーチェックを少々追加。
version0.8.1 指定録音モードの日付の扱いがおかしかったのを修正。(※挙動がかわる場合があるので注意してupdateしてください)
version0.7  pathに空白が含まれていた場合にエラーになるのを修正。
version0.6  テンポラリの初期値を /dev/shm → /tmp に変更。
version0.5  rawモードに無駄があったのを修正。
version0.4  指定録音モード追加。
version0.3  AutoTokenのretryルーチンを修正。.inc.sampleファイルを修正。
version0.2  午前0時直後にtestコマンドを実行するとテストに失敗する問題を修正。若干のエラー処理追加。
version0.1  radikoの仕様変更により、タイムフリー録音に切り替えた。version番号をリセット。