ゴールデンウィークに台湾へ行きました。
以前も書いたようにリアルタイムでラジオの聴取はできないのでNHKゴガクのサイトを使っていますが、海外では聴取できないので何らかの手を打たねばなりません。
※実際にはゴールデンウィーク中の配信はお休みでした。
ffmpegを使って録音する
らじる★らじる m3u8 を ffmpeg で録音する(8放送局)2017/9 以降対応|別館 子子子子子子(ねこのここねこ)に書いてあるとおりです。
ffmpegというと大概音声ファイルや動画ファイルのフォーマット変更に使うことが多いです。
ffmpeg -i source.wma destination.mp4
こんな感じで-iオプションとともに変換元のファイルを指定し、続けて変換後のファイルを指定すると拡張子に応じてフォーマット変更をしてくれます。この程度の使い方しかしていないんですが、-iオプションにurlを指定するとネット上のファイルも引っ張ってきてくれるようです。
通常のファイルと違うのはストリーミングデータだから-toオプションで入力時間を指定する必要があること。そうしないといつまでも変換し続けます。
そうして出来上がったシェルスクリプトがこちら。
#! /bin/sh
# まいにち中国語
# 放 送:月~金曜日 午前8:15~8:30
# 再放送:同日 月~金曜日 午後10:15~10:30
# 再放送:日曜日 午前11:00~午後0:15(5回分)
# まいにちロシア語
# 放 送:月~水曜日 午前8:50~9:05
# 再放送:同日 月~水曜日 午後4:30~4:45
# 再放送:翌週 月~水曜日 午後3:30~3:45
#
# crontab -e
# 14 8 * * 1-5 /home/takeru/record.sh
# 14 22 * * 1-5 /home/takeru/record.sh
# 59 10 * * 0 /home/takeru/record.sh
# 49 8 * * 1-3 /home/takeru/record.sh
# 29 16 * * 1-3 /home/takeru/record.sh
# 29 15 * * 1-3 /home/takeru/record.sh
DATETIME=`date +"%Y%m%d,%H,%M"`
URL='https://nhkradioakr2-i.akamaihd.net/hls/live/511929/1-r2/1-r2-01.m3u8'
HOUR=`echo $DATETIME | cut -d ',' -f 2`
MIN=`echo $DATETIME | cut -d ',' -f 3`
LENGTH='1020'
DIRNAME="/home/takeru/Lang/"
case $HOUR in
'08')
if test $MIN -eq '14';then
PROG='CN'
elif test $MIN -eq 49;then
PROG='RU'
fi
;;
'10')
PROG='C3'
LENGTH='4620'
;;
'15')
PROG='R3'
;;
'16')
PROG='R2'
;;
'22')
PROG='C2'
;;
esac
FILENAME=$DIRNAME`echo $DATETIME | cut -d ',' -f 1`"-${PROG}.m4a"
/usr/local/bin/ffmpeg -i $URL -to $LENGTH $FILENAME
VPSのcronで動かす
スクリプトのコメントを見ていただければわかるように、中国語講座とロシア語講座の本放送と再放送を録音します。
中国語講座
放送 | 月~金曜日 | 午前8:15~8:30 |
---|---|---|
再放送 | 同日 月~金曜日 | 午後10:15~10:30 |
再放送 | 日曜日 | 午前11:00~午後0:15(5回分) |
ロシア語講座
放送 | 月~水曜日 | 午前8:50~9:05 |
---|---|---|
再放送 | 同日 月~水曜日 | 午後4:30~4:45 |
再放送 | 翌週 月~水曜日 | 午後3:30~3:45 |
それぞれの開始時刻1分前にスクリプトを起動するようにcronを設定します。
14 8 * * 1-5 /home/takeru/record.sh
14 22 * * 1-5 /home/takeru/record.sh
59 10 * * 0 /home/takeru/record.sh
49 8 * * 1-3 /home/takeru/record.sh
29 16 * * 1-3 /home/takeru/record.sh
29 15 * * 1-3 /home/takeru/record.sh
これで指定曜日の指定時刻に放送を録音できるようになりました。
音声ファイルを聴取する
後はこのファイルへのアクセス方法です。
録音した音声ファイルを下記のようなファイルとともにWebサーバー上に置いておけば、いつでもどこでもブラウザで音声を聞くことができます。
<!doctype html>
<html lang='ja'>
<head>
<meta name="viewport" content="width=320px">
</head>
<body>
<ol>
<?php
foreach(glob(__DIR__."/*.m4a") as $file) {
echo "<li><a href='./".basename($file)."'>".basename($file)."</a></li>";
}
?>
</ol>
</body>
</html>
このように。


ただし誰でもアクセスできるようになっていると問題があるので、Basic認証を設定しておきます。ストリーミングデータの録音自体は私的利用の目的であれば問題ないはずですが、誰でもアクセスできる状態は著作権の侵害になってしまいますからね。