Linux で Radiko を録音する

CentOS

学生時代、田舎に住んでいるとテレビよりなにより都会のラジオ番組の幅広さに憧れたりしたものである。

今じゃ Radiko というのもあって、条件さえそれなりに揃えられれば田舎に住んでいるまま都会のラジオをエアチェックできるようになった。ああ、もちろん私的利用の範囲内で。

首都圏はいまや AM ラジオも Radiko 経由で聴くとステレオで聴けるようになっている。Podcast 配信されているものはわざわざモノラルに落としているとか。いやー同じ番組でもそんなに地域格差があるもんなのね。

ただし、条件を揃えるにはそれなりの幸運か費用が必要になるのだけれども (後述)、条件を揃えていなくとも普通に地元のラジオをエアチェックするのに役立つハナシのハズなので落胆なさらずに。

これまでは Windows の.NET アプリである Radika というものをとても便利に使わせていただいていたのだけれど、これのために Windows マシンを起動しておかねばならぬわけで、それをしても余りある便利さだったのだけれども、Linux でスクリプトで録音できればそもそも普段から常時稼働しているサーバーにしかけておくことができるわけで、そっちのほうがいいなあと。そんなわけでついにというかやっと乗り出しのであった。

スクリプト

録音スクリプトは先達の皆様の成果をありがたく甘受したうえで、ちょこっといじってある。ちなみに gist ってのをはじめて使ってみた。リンク先のソースコード右上にある「<>」ってところをクリックして保存すればダウンロードできるみたいよ。

簡易Radiko録音スクリプト

依存ツール

上記スクリプトは、それぞれ以下のものが必要である。カッコ内は CentOS-6 での rpm パッケージ名。ここに書いた追加リポジトリを使えるようにしておけば、yum コマンドでスルリと入るハズ。

  • xmllint (libxml)
  • curl (curl)
  • ffmpeg (ffmpeg)
  • libmp3lame (lame)
  • perl (perl)

使い方

使い方はこんなカンジ。もちろん rec_radiko.sh に実行属性を付与しておくように。

./rec_radiko.sh チャンネル 録音時間(分) 保存先ディレクトリ  ファイル名

第1引数は放送局のチャンネル指定。第2引数は分単位の録音時間。第3引数はファイルの保存先ディレクトリで、指定しなければカレントディレクトリに保存される。第4引数は番組名など、ファイル名にしたい文字列を指定する。HOGEHOGEと指定すれば保存されるファイル名は HOGEHOGE_日付.mp3 だし、指定しなければファイル名はチャンネル_日付.mp3 の形式になる。

つまり、TBSラジオ日曜 19:00~20:25 放送の『菊地成孔の粋な夜電波』を録音したければ、以下のようなカンジで crontab に登録すれば良いハズだ。

00 19 * * Sun /foo/bar/bin/rec_radiko.sh TBS 85 /foo/bar/data IKINA_YORUDENPA

サーバーの時刻をntpで合わせていれば Radiko の配信は概ね数秒早くはじまるので頭が切れることはほぼないし、終わりについてもどうせ民放はCMが入るので早すぎることもないのだが、マレにずれていることもないわけではないので、気になる向きは1分早く開始して、1分長く録音するようにしたほうがいいだろう。

チャンネル一覧

で、チャンネルってどうやって指定するのよというはなしなのだけれども、こちらに全国一覧があった。

radikomemofoltia – Trac

保存先

さて、こうして録音したファイルはどこに保存しようかということになる。
冒頭で書いたように、田舎に住んでいるまま首都圏のラジオ番組を録音するには、例えばお使いの ISP が利用しているグローバルアドレスがたまたま首都圏と認識されていたとか、または首都圏にデータセンターのある、root 権限の使えるレンタルサーバーを借りるなりする必要がある。

録音されたファイルを聴くにはなんらかの方法でそのファイルを手元に持ってくるか、ストリーミングで聴けるようにする必要がある。録音したサーバーがインターネット上で Web サーバーとして機能していれば公開ディレクトリに録音ファイルをおいて、Web ブラウザでそのファイルを直接叩くという方法が考えられる。

もうちょっとスマートにいくと、Dropbox のようなオンラインストレージに保存すれば、自分のデスクトップ PC やらスマートフォンからいつでもどこでも聴くことが可能になったりする。

Linux で Dropbox をコマンドラインのみで利用する方法もあることはあるのだが、上記のような幸運に恵まれず、ここみたいな格安サーバーを借りてケチケチ運用する場合は、いずれにせよディスク容量がもったいないので、どこかに転送してサーバー上のファイルは消してしまいたい。

そこで、僕は Box を WebDAV としてマウントして利用している。この場合、Dropbox に比べると非常にファイル処理速度が遅いという問題があるものの、ローカルではなく直接 Box 上にファイルをコピーできるというメリットがある。ちなみに、Windows や Mac の Box の同期クライアントでは、同期するファイルサイズに制限があって上記の『菊地成孔の粋な夜電波』を 90 分録音したファイルは転送できなかったが、WebDAV 経由であれば特に問題なかった。

ではマウント方法。CentOS-6 では以下のようしたらうまくいった。

sudo mount -t davfs https://dav.box.com/dav /foo/bar -o uid=user,gid=group

ログインID (メールアドレス) とパスワードを聞いてくるので入力してやれば良い。uid 及び gid は、Linux 上の自分のユーザーとグループを指定してやる。

マシンリブート時にも自動的にマウントしたければ、/etc/fstab に以下のように記述する。

https://dav.box.com/dav /foo/bar davfs defaults,uid=user,gid=group

ログインID (メールアドレス) および パスワードは /etc/davfs2/secrets に以下のように記述する。

https://dav.box.com/dav ログインID パスワード

これで、iPhone/iPad のクライアントでストリーミングして聴いたりすることができる。この、iOS クライアントで音声がストリーミングできて、かつ Linux にも対応しているオンラインストレージが意外に少ないのである。

なお、これをお読みになるのは分別ある大人の皆様であろうと思うので重ねて申し上げるのは野暮ではあるけれども、録音したファイルはあくまで私的利用の範囲内でお使いいただけますように。

2012/10/30追記

Box を WebDAV マウントする場合、/etc/davfs2/davfs2.conf に以下の記述を入れておかないと、複数のファイルを連続で書き込もうとすると Permission denied となってしまうようである。

use_locks 0

2013/4/4更新

録音スクリプトでファイル名を指定できるようにしたのと、ntp についての説明を追記。

2014/1/16更新

コメントでご指摘いただいていたように、Box を WebDAV マウントする際の URL が変更されているので本文も修正。Box の無料容量が大幅に増えたようなので念のため…

2016/10/24更新

Radiko の仕様変更に対応

2020/12/3更新

いよいよ Radiko も Flash を撲滅してしまったので、HLS に対応させました。これは radish という素晴らしいスクリプトを参考にというか丸パクして対応させたものです。radish はらじるなどの Radiko 以外にも対応しているし、Radiko 課金ログインにも対応しているみたいなので、今後は radish をお使いになることをオススメします。とりあえず今回の修正はイキナリ変わってもパラメータとかよくわかんねえよ!という方向けです。

関連記事

保存

コメント

  1. kopemon より:

    https://www.box.com/dav から https://dav.box.com/dav に変更になったぽいですよ。以前のアドレスではマウントできなくなってしまいました。。

  2. h より:

    仕様変更への追従、非常に助かります!!
    ありがたく使わせて頂きます。

  3. なにー より:

    こんにちは。
    スクリプト公開ありがとうございます。
    Manjaro Linuxでスクリプトを使わせてもらっています。

    1つ質問があります。
    関西在住なのですがやっぱりradikoプレミアム会員になっても関東の番組は録音できないですよね。
    関東のラジオを録音しようと思ったら、やっぱり関東のレンタルサーバ借りるとかって方法ぐらいしかないでしょうか。

  4. aretha より:

    3年前5年前にらじるらじるの仕様変更ではお世話になりました。
    またお世話になります。

    2020/12/3更新
    いよいよ Radiko も Flash を撲滅してしまったので、HLS に対応させました。これは radish という素晴らしいスクリプトを参考にというか丸パクして対応させたものです。
    の これは のスクリプトはどこにあるのでしょうか

    よくわからないので

    録音スクリプトは先達の皆様の成果をありがたく甘受したうえで、ちょこっといじってある。ちなみに gist ってのをはじめて使ってみた。リンク先のソースコード右上にある「」ってところをクリックして保存すればダウンロードできるみたいよ。の 簡易Radiko録音スクリプト と

    これは radish という素晴らしいスクリプトを参考にというか丸パクして対応させたものです。の radish のリンクをコピーして動かしてみたのですが、うまく動いてくれません。

    当方 CentOS Linux release 7.8.2003 (Core) ffmpeg version 2.8.15 です
    よろしくお願いします。

    • matchy より:

      いつものようにgistのコードを上書き更新していますよ。うまく動かない、というのはなにかエラーとか出ますか?もっともradishの方を使うことをオススメしますが…

      • aretha より:

        素早いコメントありがとうございます。
        radish で動きました。このスクリプトは従来の
        00 19 * * Sun /foo/bar/bin/rec_radiko.sh TBS 85 /foo/bar/data IKINA_YORUDENPA 式から
        パラメータの取り方が大きく変わっていて、スクリプトを読みながら何とか録音まではできました。
        ファイルがデフォだとm4aになったりとかわからないことが多いですが、少しずつ解析していきます。

        • matchy より:

          そうですかよかったです。
          まあかくいうワタシ自身は、Raspberry Piでの定時再生にrec_radiko.shを再生用に改変したものをとうぶん使いつづけますがw

        • matchy より:

          あ、しまった最後にmp3に変換するところがコケてました(汗)。もっともイマドキはわざわざmp3にしなくても、HE-AACがちゃんと使えるプレイヤーが増えたのでm4aでいいと思いますけれども。とりあえず修正はしておきました

  5. aretha より:

    私メインがラズパイで、ffmpeg を avconv とだけ変更して、バックアップのCentOS7はオリジナルで使っていました。

    先週はCentOSのradi.sh だけが動いてその他はエラーだったのですが、今日はCentOSでrec_radiko.sh radi.sh とも動いてくれてラズパイではエラーが出ます。放送局はいろいろ試しましたが同じでした。

    aretha@raspberrypi:~ $ /home/yuki/rec_radiko.sh INT 1 /home/aretha/test testtest
    http://f-radiko.smartstream.ne.jp/INT/_definst_/simul-stream.stream/playlist.m3u8: Input/output error

    aretha@raspberrypi:~ $ /home/aretha/radi.sh -t radiko -s FMT -d 1 -o /home/aretha/test/TEST_FMT
    http://f-radiko.smartstream.ne.jp/FMT/_definst_/simul-stream.stream/playlist.m3u8: Input/output error
    Record failed

    アドバイスがありましたらよろしくお願いします。

    • matchy より:

      ffmpegでHLSをぶっこ抜いているところ、「-headers “X-Radiko-Authtoken:〜」のオプションがキモなんですけれど、avconvだと該当するオプションありますかね?ラズパイでもbusterとかだとffmpegが使えるので、アップグレードも検討されてはどうかと

      • aretha より:

        ありがとうございます。理解できました。
        私いまだにラズパイ2なので買い替えの潮時かも。

        • あじ より:

          横から失礼します!
          わたしもラズパイ2でavconvを使っていた口でこちらの情報で解決できました。
          busterでとのことでしたが、strechにアップデートしただけでもffmpegは勝手にインストールされ録音できるようになりましたよ!!
          ただしアップデートされるときは必ずバックアップしてからにしましょう!1回目は大失敗し、環境が壊れました 笑

  6. aretha より:

    やっと ラズパイにbuster 入れて試したところ
    aretha@raspberrypi:~ $ /home/aretha/rec_nhk.sh FM 1 /home/aretha/test TEST_NHK
    メッセージなしですぐに終了
    aretha@raspberrypi:~ $ /home/aretha/rec_radiko.sh FMT 1 /home/yuki/aretha/test Recradiko_TEST_FMT
    failed auth1 process
    aretha@raspberrypi:~ $ /home/aretha/radi.sh -t radiko -s INT -d 1 -o /home/aretha/test/TEST_INT
    radiko authorize failed
    で動いてくれません。
    ダメもとでVirtualBox に Raspberry OS buster 入れて試したところ、拍子抜けなくらいすべてあっさり録音できてしまいました。
    スクリプトは両方GITそのまま。ffmpegとかもラズパイ、バーチャルボックスとも同じやり方で入れました。
    思い当たるところがありましたらよろしくお願いします。

    • matchy より:

      すみません、微妙に修正したりしています。ラズパイで試していただいたヤツがちょっと古かったかもです。VirtualBoxで動いているスクリプトをラズパイにコピーして試してみていただけますか?

      • aretha より:

        ご丁寧にありがとうございます。
        やってみましたが変わりませんでした。
        ソフトは同じ入れ方で入れたつもりだったんですが、微妙に違っていたのかも
        はっきり違うのは、ラズパイはポートを変えたとかhosts.allowを設定したくらいしか
        思いつきません。
        時間があるときにラズパイbusterを更から入れて再度試そうと思いますが、
        他に気づくことがありましたらよろしくお願いします。

        • matchy より:

          そういえば今回の版からwgetではなくてcurlを使っています。なぜかcurlでないとうまく動かないので…。ラズパイのほうにcurlが入っていないとか…?

          • aretha より:

            curlは入ってました。
            結局busterを再インストールして、思いつくソフトを片っ端?から入れたら出来ました。
            cronも設定できてヤッターって思ったら、dropbox_uploaderでまた躓き。
            APIのバージョンが変わったとか?で、アクセストークンはわかるんだけどアクセスコードの
            該当URLがエラーでコードが分からず。
            またボチボチやってきます。いろいろありがとうございました。