雑なやつ

レベルを上げて技術で殴りたい

VPS を式年遷宮する その4 Radiko の録音環境構築

概要

Radiko にてリアルタイム配信されている番組を自動録音する環境を構築した。
先人が公開しているソースコードを Fork し、自身の環境や使い勝手に合わせて改変した。
その際の作業内容を記述する。

構築する目的

radiko.jp

Radiko にはタイムフリーという名の過去番組聴取機能が存在するが、

  • 聴取可能期間は放送終了から1週間
  • タイムフリー再生開始から3時間が経過すると聴取権限が無くなる

といった制限があり使い勝手がよろしくないため、後日好きなタイミングで再生が出来るようサーバ上で録音出来る環境が欲しかった。

環境

Radiko都道府県を IP アドレスで判定しているため、VPSのリージョンによって聴取出来る放送局が違います。
私は東京の放送局を主に聴取しているので東京リージョンを選択しましたが、
他地域の放送局を聴取したい場合は別リージョンを用意してください。

サーバ

  • さくらの VPS 1GBプラン 東京リージョン(これが重要)
  • Ubuntu 18.04
  • RTMPDump 2.4
  • ffmpeg 3.4.8

ローカル

  • macOS 10.15.6 Catalina
  • iTerm2

Radiko 録音の OSS 紹介

Radiko の録音ツールに関しては、先人が OSS として公開している物が存在しているので、その中で気になった物を下記に示します。

matchy2/rec_radiko.sh

matchy2/rec_radiko.sh

matchy2 さんが Gist にて公開されており、旧サーバからお世話になっている OSS です。
今回はこのリポジトリを Fork して自分用にカスタマイズしました。

sankaku/docker_rec_radiko

github.com 上記 OSS を参考に Docker 化した方もいらっしゃしました。
Docker が実行できる環境ならこちらのほうがお手軽かも。

yyoshiki41/radigo

github.com qiita.com Golang で書かれており、CLI で現在聴取可能番組一覧の表示や、タイムフリー/リアルタイム録音が可能。
プレミアム会員の方は mail / password を環境変数に設定してエリアフリーの録音機能も可能。
今後、自前で録音ツールを開発する際に参考にする予定です。

Fork したコードについて

Fork 先リポジトリは下記リンクを参照。

y4shiro/rec_radiko.sh

Fork 元との差分は下記1点のみ。

  • ファイルの保存形式を mp3 から m4a へ変更

私の環境では m4a 形式(中身は AAC)でも再生に支障が無いので、mp3エンコード時にかかる時間の省略/ファイルサイズの縮小を図った事が理由となります。

作業手順

必要パッケージ導入

スクリプト実行に必要なパッケージを導入します。

$ sudo apt install rtmpdump
$ sudo apt install swftools
$ sudo apt install libxml2-utils
$ sudo apt install ffmpeg
$ sudo apt install libavcodec-extra

スクリプト実行

スクリプトを設置するディレクトradiko/bin と番組保存ディレクトradiko/data を作成し、Gist から Clone します。

$ mkdir -p radiko/bin radiko/data
$ cd radiko/bin
$ git clone https://gist.github.com/246a08f5df885d8566bb546a15c7c11e.git .

実行に必要な権限を与え、スクリプトを実行して動作確認します。
引数で指定したディレクトリに test.m4a が保存されていれば OK です。

$ chomod 775 rec_radiko.sh
$ rec_radiko_m4a.sh QRR 3 /home/<username>/radiko/data test
// 実行時に引数が必要で、それぞれ 放送局 id 録音時間(分) 保存ディレクトリ ファイル保存名 を指す。

放送局 id に関しては、Radiko 公式ページでは一覧表などが用意されていないため、 有志の方が公開されているリストを参照してください。

www.norikistudio.com

私の環境では、スクリプト実行時に Perl の warning が出ました。
録音に支障はないのですが、以下の記事を参考にパッケージを導入して解決。

qiita.com

$ sudo apt install locales-all

タイマー設定

定期的に番組を録音する場合は crontab で指定します。
私が実際に運用している例を下記に示します。

$ crontab -l
# m h  dom mon dow   command
00 19 * * 6 /home/<username>/radiko/bin/rec_radiko.sh QRR 121 /home/<username>/radiko/data キミまち
00 21 * * 6 /home/<username>/radiko/bin/rec_radiko.sh QRR 121 /home/<username>/radiko/data エジソン

今後の展望

今回構築した環境では、crontab にて録音したい番組の日時を直接指定する必要があり少々手間がかかる。
Web ページ上で番組表の表示 / 番組表からの予約といった Web アプリを実装してもよい気がした。