68 ネットラジオを聴く・録音する (streamlink, ffmpeg)

(よくわからないのでしばらく工事中になるだろう。)

Covid-19流行が始まって以来、自動車を運転して移動することが増えた。 もともとラジオが好きだったので、FM を聴きながら運転していることが多い。

続きを聴きたいな (でも、最近の電波の入りにくい建物の中ではラジオ使いにくいな)、 ということでネットラジオを調べてみた。

radiko は有名だけれど、メジャーな局しか聴けない。

コミュニティFMというのもあるね。 運転しているときに、FM世田谷や調布FMを聴いたりしている。 「地区町村単位の地域に放送を行うFM局のこと」 だそうだ。 どういうのがあるかは、 https://www.jcbasimul.com/ とか https://www.jcbasimul.com/otherをみよう。でも、これで網羅できるわけではないのか。

色々なFM局を聴くためのリンクがはってあるサイトが色々ある。 https://listenradio.jp/ とか、 https://www.radiojapan.org/ とか。


正直なところ、何がどうなっているのか、全貌がとらえにくい。

「ブラウザでネットラジオを受信する」


時々録音したくなる (いまどきテレビだって録画して観るのが普通でしょう?)。 メジャーな radiko については、録音が可能なアプリが色々あるみたい (これについてはそのうちに)。

録音については、 「radikoのダウンロード方法」 には、streamlink を使う方法も説明されている。

「STREAMLINK の使い方」

streamlink の、MacPorts でのインストールは簡単である。
sudo port install streamlink

実際、Tokyofm は一応できた。
streamlink 'https://radiko.jp/#!/live/FMT' best -o output.ts
ffmpeg -i output.ts radiko`date '+%Y%m%d'`.mp3
rm output.ts

streamlink はどうやって終了するのかな?control-c か?

radiko で聴ける局については、 FMT のところを色々変えればいいみたい。 https://radiko.jp/#!/top から選べば必要な URL が分かる。

それでは、コミュニティFM はどうするのだろう。

radiko ではないわけだけれど、 「FFmpegを使ってradikoを録音する方法」 で紹介されている方法でできた。

例えば、調布FMは、ネットでは、 https://www.radiojapan.org/で聞くことができる。 https://www.radiojapan.org/diao-bu-fm-chofu-fm

Google Chrome でそれを聴いている状態で、 [表示] [開発/管理] [デベロッパー ツール] Networkタブ、 m3u8 をフィルターに指定して、chunklist を探す。 [Copy] [Copy as cURL] として、 chunklist の URL を調べる。 それで、 https://mtist.as.smartstream.ne.jp/30039/livestream/chunklist.m3u8というのが見つかった。これを ffmpeg に指定すれば良い。
ffmpeg -i "https://mtist.as.smartstream.ne.jp/30039/livestream/chunklist.m3u8" -vn radio.mp3
q を押して終了する。

FM世田谷は? FM世田谷自身のWWWサイトにリンクが載っているサイトからは、 chunklist の URL がゲット出来なかった。 https://www.radiojapan.org/fmshi-tian-guから聴いたら、 https://mtist.as.smartstream.ne.jp/30027/livestream/chunklist.m3u8を知ることが出来た。 後は同様にしてできる:
ffmpeg -i "https://mtist.as.smartstream.ne.jp/30027/livestream/chunklist.m3u8" -vn radio.mp3

こういう URL を集めた人もいるけれど (「ネットで見つけた様々なラジオチャンネルのプレイリストです。」)、 網羅性はないみたい。

mtist.as.smartstream.ne.jp は、 NTT スマートコネクトというところが立てているサーバーみたいだけれど、 そこが一覧表を出したりしないのかな。


どうやって止めるのか?と書いたけれど、 「配信終了まで」という説明を読んだ。そのまま番組のエアチェックができるのかな? そうだとすると次のようなシェル・スクリプトを書いて、 cron とかで起動すれば良いのか。
download-chofu.sh
#!/bin/sh
export URL="https://mtist.as.smartstream.ne.jp/30039/livestream/chunklist.m3u8"
export FNAME=`date "+chofu-%Y%m%d%H%M.mp3"`
/opt/local/bin/ffmpeg -i $URL -vn $FNAME
crontab -e
crontab にこんなふうに書く
# minute hour day-month month day-week
# every Saturday 21:00
0 21 * * 6 /Users/mk/bin/download-chofu.sh >> /tmp/download-chofu.log 2>&1

あ、うまく止まらなかった。仕方ないので ffmpeg で切り取る。 先頭から 1800秒 (30分) 切り取るには
ffmpeg -i ファイル名 -s 0 -t 1800 -acodec copy output.mp3

正確でないけれど、一応キレるみたいだ あるいは -max_reload 1 とするのかな。 試行錯誤だ。


(2024/4/14追記) 結局、 念のため放送開始1分前 (21:00開始だったら20:59) に録音を始めることにして、 30分番組だったら31分 (1860秒) 録音を続けることにした。 ファイル名は date コマンドを使って起動した日時をつけたものにする。
crontab にこう書いた (crontab -e で編集)
# every Saturday at 21:00
59 20 * * 6 /Users/mk/bin/download-chofu-31.sh >> /tmp/download-chofu.log 2>&1
download-chofu-31.sh
#!/bin/sh
export FNAME=`date "+chofu-%Y%m%d%H%M.mp3"`
/opt/local/bin/ffmpeg -to 1860 -i "https://mtist.as.smartstream.ne.jp/30039/livestream/chunklist.m3u8" -vn $FNAME
昔、 TEAC のオープンリール使ってオールナイトニッポンを録音したことを思い出した。



桂田 祐史