radikoでラジオを録音→iTunesに登録→iPodに同期を自動実行 | 忘れたらググればいい

2012年1月12日木曜日

radikoでラジオを録音→iTunesに登録→iPodに同期を自動実行

録音した深夜ラジオを次の日にはiPodで聞きたい

引っ越しの時にラジオを廃棄してしまったので,一時期深夜ラジオを聞くことがなかったけど, radikoが始まってラジオを聞く頻度がかなり増えた.

特に深夜ラジオは中学の頃から聞いていて,今でも面白い番組が多い. ただ,深夜ラジオはAM1時〜3時が多く (地方では深夜ラジオと言えばオールナイトニッポンくらいしかない) , 放送終了まで聞き続けるのは大変.

したがって,後日聞いたり,寝落ちに備える意味でもラジオを録音しておきたい,という願望が昔からあった. 中学の頃はラジカセで120分のカセットテープへ録音,高校・大学の頃はMDへと録音していたけど, 今はラジオは持っていないし,どうせならノイズが乗らないradikoで録音したい. また,デジタルデータとして録音しておくと,携帯音楽プレーヤーへ移せばいつでも聞けるので便利.

と,言うわけでradikoで番組を予約録音し,iTunesへ登録,さらにiPodに同期させるところまで自動で行う方法を考えた.

radikoの録音

radikoをMacで録音する方法はすでに先人によって公開されている.

radiko録音その4(Mac):んー:So-netブログ
今回使うスクリプトは基本的にこれを使用しますが,rtmpdumpとかffmpegとかの準備はリンク先のブログを参考にしてください.

録音に使うスクリプトは radiko4.ksh と get_auth.sh の2つ.どちらもutf-8で保存. 両方とも ${HOME}/bin に置いた.が,どこに置いてあっても特に問題はないはず.

radiko4.ksh は実行時に引数で録音時間や番組情報を指定し,実行すると即時録音が始まる. その後,録音が終了すると自動的にiTunesへファイルが追加される. 詳しい使い方はリンク元を参照.

radiko.kshの変更点

radiko4.ksh は radiko.ksh とリネームし,内容を一部変更した.

50c50
< GetAuth_SRC="${HOME}/get_auth.sh"
---
> GetAuth_SRC="${HOME}/bin/get_auth.sh"
57a58
> BITRATE=65536
67c68
<         t) TITLE="${OPTARG} ${DATE2}";;
---
>         t) TITLE="${OPTARG}";;
100c101
<     -y -i - -vn -acodec ${CODEC} -ar 44100 -ab 196608 -ac 2 "${RFILE}" > /dev/null 2>&1
---
>     -y -i - -vn -acodec ${CODEC} -ar 44100 -ab ${BITRATE} -ac 2 "${RFILE}" > /dev/null 2>&1

変更点は以下のとおり.

  • GetAuth_SRC: get_auth.sh の場所を自分の環境に合わせて変更
  • 録音時のビットレートが固定で設定されていたので,変数として BITRATE を bits/s で設定.64kbpsならば 64×1024=65536."64k"みたいな設定も可能らしい? ちなみに64kbpsで2時間だと約60MBになる.
  • iTunesでの曲名が "タイトル 録音実施日時" に固定されてしまうので,こっちのスクリプトでは ${DATE2} を除きタイトルは番組ごとに用意する録音スクリプトで設定することにする.

録音用スクリプト (番組ごとに用意する)

録音したい番組ごとにスクリプトを用意する.スクリプトには,録音する放送局,録音時間 (長さ) ,iTunesに登録される情報とかを設定する.文字コードはutf-8.以下は深夜の馬鹿力の例.

#!/bin/sh

# rec_ijuin.sh


# IDで録音する放送局を指定.IDと放送局の対応は radiko.ksh を参照
ID="TBS"
# OFILEは最終的にできるファイル名の一部で使う.番組名を表す文字列を指定しておけばいい.
OFILE="ijuin"
# 録音時間 (分) .radikoは遅延があるので,余裕を見て+5分くらいにしてある.
TIME="125"

# タイトルに含めるための日付.
# 番組が1時開始で,スクリプト実行時には日が変わってしまっているので,-v-1d で1日戻す.通常はいらない.
date=`date -v-1d +%Y年%m月%d日`

# タイトルは 「YYYY年MM月DD日 番組名」とする.
TITLE="${date} JUNK 伊集院光 深夜の馬鹿力"
ARTIST="TBS RADIO 954kHz"
ALBUM="JUNK 伊集院光 深夜の馬鹿力"
GENRE="ラジオ"

# 録音を実行し,録音終了後iTunesへ登録.
~/bin/radiko.ksh ${ID} ${OFILE} ${TIME} -t "${TITLE}" -a "${ARTIST}" -A "${ALBUM}" -g "${GENRE}"

# iPodとiTunesの同期を実行 (後述)
open ~/bin/sync_ipod.app/

iPodだと曲名の後半が省略されてしまうので,タイトルを「YYYY年MM月DD日 番組名」としていつの放送か分かるようにした. あとARTISTやALBUMは自由につければいいんだけど,番組のPodcastが公開されているなら,その表記に合わせるとiTunesやiPodで見る時に統一されて便利.

iPodとiTunesの同期をスクリプトから呼び出すためのAutomator

radiko.kshでは録音後は自動でiTunesの同期まで行われるけど,iPodとの同期はやってくれない. 夜録音→iPod同期→朝出かける時には同期済みのiPodを持っていくだけ としたいので,iPodとの同期を行う部分をAutomatorを利用して作る.

Automatorを起動したら,作成するAutomatorの種類として「アプリケーション」を選ぶ.

「ミュージック」の「iPod をアップデート」を右の枠にドラッグ&ドロップ. オプションで「このアクションの入力を無視」をチェックしておく (チェックしなくてもたぶん変わらない). 作ったアプリケーションは "sync_ipod.app" として ${HOME}/bin に保存.

iPodをMacに接続した状態でこの sync_ipod.app を実行するとiPodの同期が始まる. ただし, sync_ipod.app の実行時に iTunes が起動していないと,警告メッセージが出てしまう. が,OKを押さなくても同期は開始するのでたぶん問題ない. Lionなら起動時にアプリケーションの状態を復元させられるので,警告が気になるならiTunesは常に起動状態にしておく方がいいかも.

Macの起動設定

システム環境設定でMacの自動起動を設定. あまり細かく設定できないけど,幸い録音したい番組は全部AM1時スタートなので,起動時刻は 0:55 にしておく. 終了時刻は同期までの時間に余裕を持たせて 3:15 とした. なお金曜深夜は,日付的には土曜日なので「平日」にすると起動しないので注意.

cronの設定

実行開始時刻=録音開始時刻なので,すべて番組開始1分前とした. 月曜深夜25:00は火曜AM1:00なので,曜日の指定を間違えないように注意. なお,cronの設定方法は適当に調べてください.

59 0 * * 2 ~/bin/rec_ijuin.sh
59 0 * * 3 ~/bin/rec_bakusho.sh
59 0 * * 4 ~/bin/rec_fumou954.sh
59 0 * * 5 ~/bin/rec_99ann.sh

注意

radiko.ksh での録音中にネットワークが一定時間途切れるとそこで録音が止まってしまうことがあるので注意. 自動で再開させるのは難しそうなので,止まった時は手動で録音スクリプトを実行させることで対処. また,iTunesの同期の前に radiko.ksh が止まってしまうとそこまでの録音ファイルは /tmp に残ったままになるので,これも手動で救出するしかない.

iPodをMacに接続しておくだけ

毎日iPodをMacに接続しておくだけで,朝になったら前日の放送が同期されている環境が完成. すでに数ヶ月運用しているけどいまのところとても快適.