Raspberry Pi用 NHKラジオ 簡易録音スクリプト

2023.4更新 / 2020.12

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

■動作確認環境

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

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

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

聴取用スクリプトは→こちら  Radikoの録音は→こちら

■準備

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

$ sudo apt install ffmpeg

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

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

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

テストコマンドを実行し、カレントディレクトリに test_nhk.mp3 が出力されれば動作成功です。(NHK第二が1分間録音されます)

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

※mp3が無音の場合は放送時間を確認してください。 深夜など、放送時間外だと無音ファイルになります。

■テンポラリ領域の確保

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

wkdir='/radiko'  (例)

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

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

■NHK URL設定

NHKのURLは、お住まいの地域により異なります。 https://www.nhk.or.jp/radio/config/config_web.xml を参考にして、スクリプト内の以下の場所を書き換えてください。上から NHK第一/第二/FM になります。

nhkd1='https://radio-stream.nhk.jp/hls/live/2023229/nhkradiruakr1/master.m3u8'
nhkd2='https://radio-stream.nhk.jp/hls/live/2023501/nhkradiruakr2/master.m3u8'
nhkfm='https://radio-stream.nhk.jp/hls/live/2023507/nhkradiruakfm/master.m3u8'

■番組設定

番組設定は rec_nhk.sh の中にある、次のような部分にあります。
この例でいうと $ ./rec_nhk.sh keigo と打った瞬間からNHK第二放送の録音が開始されます。

elif [ $pname = 'keigo' ]; then
channel='d2'
savdir="/home/${uname}/radiko/eigo"
fname="基礎英語 !date!"
rectime=1875
convoffset=45

各項目についてですが、まず channel='XXX' のところがチャンネル名です。

チャンネル名には d1,d2,fm いずれかを指定してください。それぞれNHK第一、第二、NHK-FMを意味します。

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

rectime の 1875 は秒数です。1875秒すなわち31分15秒間です。 録音時間を長めに指定する理由については、次の crontab の項目を見てください。 convoffset の意味もそこで説明します。

■crontabの設定

このスクリプトは、起動した瞬間から指定した秒数だけ録音して終了するという簡易スクリプトです。
そのため番組時間の直前にスクリプト起動する必要があります。
起動は crontab という自動起動プログラムを使います。
(※ crontab の編集方法、記述方法は各自で調べてください。難しくはないはずです)

次の例は、毎週日曜日20:00からの30分番組のために、19時59分に rec_nhk.sh を起動するという設定です。

59 19 * * 0 /xxx/rec_nhk.sh keigo >/dev/null 2>&1
※ xxx は rec_nhk.sh を置いたディレクトリまでのパス

放送時間ぴったりに起動していませんが、その理由は2つあります。

ひとつは頭切れを避けるためです。もうひとつはアクセス集中による接続失敗を避けるためです。

そのためこの例では、余裕をもって1分前に起動しています。

ただ、このままだと先頭に無駄な音声が録音されてしまいますね。

そこで本スクリプトでは、テンポラリに保存した録音データを、mp3変換する際に、先頭を飛ばすという処理をします。 convoffset の右辺はその秒数です。

つまりこの例は、NHK第二を日曜日の19:59:00から1875秒間(20:30:15まで)録音し、先頭の45秒を飛ばしてmp3に変換して保存するという意味です。(19:59:45~20:30:15の、30分30秒分のファイルが出来上がります)

起動時刻、録音時間(rectime)、convoffsetを調節して、希望の番組がうまく収まるように各自で調整してください。

基本的な説明はこれで終わりです。

■音質設定・無劣化録音

音質は次の項目で設定できます。 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 の設定は無視されます。 (※convoffsetは有効です)

■日付について

ファイル名の !date! の部分が日付に置換されますが、この日付は、本スクリプトを起動した瞬間の日付になります。

なんらかの理由で1日前の日付をつけたい場合は(たとえば月曜日深夜25:00からの番組に月曜日の日付をつけたい等)、番組設定の領域に fndate=1 という行を追加してください。

fname="ラジオ深夜便 !date!"
fndate=1 ← この行を付け加える

■エラーログについて

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

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

□録音できなくなったときのチェックポイント

録音できなくなったときには、まず以下の項目をチェックしてみてください。

■免責

本スクリプトの使用により生じた損害について、当方は責任を負いません。

放送局側の仕様変更により、とつぜん使えなくなる可能性があります。

その場合でも制作者はスクリプト更新の義務を負いません。 あらかじめご了承ください。

―バージョン情報―

最新版DL  version0.2.1 表示をすこし調整

―old ver.―
version0.2  添付ドキュメントを修正
version0.1  とりあえず公開