らじるらじるのエアチェック
らじるらじるには聴き逃し配信があるため、大抵のコンテンツは(隠居中なら)散歩中に聴くことができる。だが、語学系の番組はやはり手元に残して何度でも聞きたい。残念ながららじるらじるの聴き逃し配信は1週間で消える。
そこで、
- 聴き逃し配信の手動ダウンロード。
- リアルタイム・ストリーミングのエアチェック。
を検討する。
聴き逃し配信の録音については、一度有料ソフトを購入したのだがその後最新版にアップデートしても録音に失敗するため、もう、手を出したくない。また、フリーソフトもあるが、バイナリ配布だけのものはちょっと……と思うのが最近の世相の悲しいところ。
一方、オープンソースで開発している人もいる。例えばこの人は開発ではないが解析結果をプログラムの形でまとめている。
ストリームをエアチェックするのなら、
が役に立つ。bashスクリプトにまとめてcronで起動すれば簡単だろう。
bashをすぐ忘れるのでメモ。
- echo $1 で、コマンドラインの最初の引数を出力する。
外部にbash_completeファイルを作らずに、引数を補完できないだろうか。PowerShellならできるのだけど。
できそうだけど、やっぱり無理かな。この例では結局補完用のスクリプトを作っている。
英語圏でも同じような質問をしている人がいる。
結論としてはできない。ただ、「一度completeという引数付きで実行して、補完を確立」してはどうだろう。
そこまで頑張らなくてもいいか。
らじるらじるのライブストリーミングはM3U8形式で記述される。M3U8情報はXMLファイルで配布されている。
M3U8ファイルを保存してダブルクリックすると、Windowsならメディアプレイヤーが開き、ライブ放送を再生する。
M3U8ファイルのURLをffmpegに渡してTSを保存することができる。
XMLのパースについて調べているのだけど、単純ループで必要なデータだけ取り出して抜ける例が多い。XMLはツリー構造でデータを保持するのでプログラム構造も多重ループになるべきだと思うが、どうなのだろう。
おおむね形になったのでリリースした。
「いや、URLを自分でコピーしてFFmpegの引数に与えれば済むんちゃう?」
そのとおり。Rustの手習いの意味もあってネットからのXMLファイルの取得、XMLファイルのパース、キャッシュなどを実装してみた。
今はホームサーバーでLXCを作り、その中でcronを使って定時に実行して取得ファイルをメールで自分宛てに送っている。
15分で5MBくらいになる。
もうちょっと大きなファイルになるとメールで送るのは気が引けるが、外部ストレージにポンポン投げる方法はこれから。まぁ、ホームサーバーにファイルサーバーを作るほうが早そうだけど。
出来たのはいいが、時折FFmpegが異常終了する。どうやらFFmpegがNHKのストリーム・フォーマットに対応できていないらしい。仕方ないのでGStreamerを使ってみた。
timeout 65s gst-launch-1.0 -e souphttpsrc location="https://radio-stream.nhk.jp/hls/live/2023507/nhkradiruakfm/master.m3u8" ! hlsdemux ! aacparse ! filesink location="nhk_radio_live_raw_aac_temp"
ffmpeg -i nhk_radio_live_raw_aac_temp -c:a copy -ss 00:00:00 -t 00:01:00 nhk_radio_live_1min_final.m4a
最初に流れっぱなしのストリームを65秒分切り出して保存している。本来ならGStreamのalarm機能を使って60秒分切り出したい、何故がUbuntuでは利用できなかった。仕方ないのでtimeoutコマンドで65秒で強制終了している。
こうして得たファイルはファイル末尾が壊れている。そこで、FFmpegで60秒分を切り出し、末尾を正しく処理して保存している。