JUNKやANN等の深夜ラジオが好きでよく聴いているのですが、深夜にリアルタイムで聴くのは難しいので、録音して仕事中とか運動するときとかに聴いています。そのため毎週の放送を自動で録音できる環境を構築するためにRaspberry Piを購入しました。
Raspberry Piを使って録音する
毎週聴いている深夜ラジオを何とか録音できる方法がないかと調べてたどり着いたのがパソコンで録音する方法。Windowsでらじれこというアプリで録音することもできますが、PCを起動している必要があるので、常時起動しても省エネなRaspberry Piを使う方法を選択しました。録音のためにメインのパソコンに電源を入れなくてもいいので毎日のようにラジオを録音するならおすすめの方法です。
必要なもの
まずはRaspberry Pi本体。ケースやケーブルもついてるスターターキットが便利です。
こんなに小さいのにHDMI、USB×4、有線LAN、無線LAN、Bluetoothもついてる。
私が使っているのはRaspberry Pi 3ですが、最新のRaspberry Pi 4でももちろんできます。
OSをインストールするためのmicroSDカード。
OSの容量は5GB程度なので16GBや32GBくらいでも十分です。
今回はラジオを録音するので、少し多めに64GBにしました。
あとは初期セットアップ用に適当なキーボードとマウス、そしてモニタとHDMIケーブル。
Raspberry PiへOSのインストール
現在はRaspberry Pi Imagerがリリースされていて、WindowsやMacから簡単にSDカードにインストールができます。
Raspberry Piのインストール
Raspberry Pi Imagerをダウンロードしてインストールします。
Windowsを使ってSDカードにインストールするなら「Download for Windows」をダウンロードします。
Imagerを起動すると、インストールするOSとインストール先を選択します。
OSはとりあえずRaspberry Pi OSを選択、インストール先はmicroSDを選択します。
インストールが終わったらmicroSDをRaspberry Piへ取り付けます。
マウスとキーボード、USB電源ケーブル、そしてHDMIケーブルをモニタにつなぎます。USB電源ケーブルはパソコン等のUSBポートだと電力不足になりがちなのでスマホの充電器など電源から直接つなげるUSBポートにつなげます。
起動すると初期設定とアップデートが始まります。
ウィザードに従って設定すればインストールは終了です。めちゃくちゃ簡単。
リモートデスクトップの設定
とりあえずマウスとキーボード、モニタをつないで初期設定をしましたが、今後はWindowsからリモート接続して操作したかったのでリモートデスクトップ接続ができるアプリケーションをインストールしました。
Windowsパソコンからraspberrypi3にリモートデスクトップで接続する – Qiita
s
udo 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
Windowsのリモートデスクトップ接続からRaspberry PiのIPアドレスを入力して上記画面が表示されれば成功です。以降はキーボードやマウスは必要なくなります。
Radikoの録音設定
録音に必要なパッケージをインストールします。
sudo apt-get install curl
sudo apt-get install libxml2
sudo apt-get install jq
sudo apt-get install ffmpeg
2020年12月よりrec_radiko.shが使えなくなりました
Radikoが11月末でFlashのサポートを終了したため、以前のrec_radiko.shは使えなくなりました。
代わりにリアルタイム録音用のradi.shとタイムシフト録音のrec_radiko_ts.shがリリースされています。
時間をかけてリアルタイムで録音する必要はないのでタイムシフトを録音します。
gitから録音スクリプトをダウンロードします。
git clone https://github.com/uru2/rec_radiko_ts
/home/pi/rec_radiko_tsに保存されます。そのままだと使えないのでパーミッションで実行権限を付与します。
/home/pi/rec_radiko_ts/rec_radiko_ts.sh -s LFR -f 202201010100 -t 202201010300 -o "/home/pi/Music/test.m4a"
試しに上記のように1分程度録音して動作確認をします。
数字の部分は(年月日時分)で開始と終了の時間を指定します。
Radikoの配信形式と同じフォーマットで保存するため、別形式へのエンコードはできないようです。
crontabでタイムシフトの自動録音設定をする
適当な場所(ここでは/home/pi/ドキュメント)に新規ファイルを作り名前をradiko.txtにします。エディタで開いて録音する設定を書き込みます。
# ANN
40 4 * * 4 /home/pi/rec_radiko_ts/rec_radiko_ts.sh -s LFR -f "`date +\%Y\%m\%d`0300" -t "`date +\%Y\%m\%d`0430" -o "/home/pi/Music/佐久間宣行のオールナイトニッポン0_`date +\%Y-\%m-\%d`"
10 3 * * 7 /home/pi/rec_radiko_ts/rec_radiko_ts.sh -s LFR -f "`date +\%Y\%m\%d`0100" -t "`date +\%Y\%m\%d`0300" -o "/home/pi/Music/オードリーのオールナイトニッポン_`date +\%Y-\%m-\%d`"
# JUNK
10 3 * * 2 /home/pi/rec_radiko_ts/rec_radiko_ts.sh -s TBS -f "`date +\%Y\%m\%d`0100" -t "`date +\%Y\%m\%d`0300" -o "/home/pi/Music/JUNK 伊集院光・深夜の馬鹿力_`date +\%Y-\%m-\%d`"
10 3 * * 5 /home/pi/rec_radiko_ts/rec_radiko_ts.sh -s TBS -f "`date +\%Y\%m\%d`0100" -t "`date +\%Y\%m\%d`0300" -o "/home/pi/Music/JUNK おぎやはぎのメガネびいき_`date +\%Y-\%m-\%d`"
10 3 * * 6 /home/pi/rec_radiko_ts/rec_radiko_ts.sh -s TBS -f "`date +\%Y\%m\%d`0100" -t "`date +\%Y\%m\%d`0300" -o "/home/pi/Music/JUNK バナナマンのバナナムーンGOLD_`date +\%Y-\%m-\%d`"
上記の設定は、
分 時 日 月 曜日 実行ファイル -s チャンネル -f 開始時間 -t 終了時間 -o 保存ファイル名
の順に並んでいます。
例えばオードリーのオールナイトニッポンなら、土曜日25:00~27:00なので、月曜日を0として7番目の曜日である日曜日の3時10分にLFR(ニッポン放送)を1時から3時までのタイムシフトを録音して「オードリーのオールナイトニッポン_(日付).m4a」という名前で/home/pi/Musicに保存するという設定です。
テキストファイルに書き込んだら、
crontab /home/pi/radiko.txt
で読み込みます。
テキストファイルをWindowsで編集する場合は改行コードをLF、文字コードをUTF-8にします。
録音データをWindowsやMacと共有する
前にあったGoogle Driveに自動アップロードするスクリプトがもう使えなくなっていたので、今はWindowsに直接マウントして共有しています。共有方法等は下記を参考に。
SambaをインストールしてWindowsと共有
Sambaをインストールします。
sudo apt-get install -y samba
smb.confを編集して共有フォルダを設定します。
sudo vi /etc/samba/smb.conf
[pi]
comment = Raspberry Pi
path = /home/pi
browseable = yes
wriable = yes
guest ok = no
Sambaユーザーを設定します。
sudo smbpasswd -a pi
Sambaを再起動。
sudo service smbd restart
WindowsのエクスプローラーにSambaのIPアドレス、もしくはraspberrypiを入力してアクセスします。
コメント
私がやりたいことが紹介されていて録画ができるようになってのですが
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
ここまではわかったのですが、何が問題なのかがわかりません。
この問題をどう対処したのか教えてもらえませんか?
調べてみましたが、どうやらRadikoが11月末でFlashのサポートを終了したことで、rec_radiko.shが使えなくなってしまったようです。
代わりにradi.shってのがリリースされてます。
https://github.com/uru2/radish/blob/master/radi.sh
おじゃまします。
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_虎たま'”
以上 大変お世話になりました。
ファイル名のエスケープが抜けていた箇所を修正いたしました。ご指摘ありがとうございます。