Serima Software
    Home

    radikoをCentOSで録音して、Dropboxを使ってiPhoneにも同期。

    さて、前回のブログで書いた「さくらのVPSを使って、rtmpdumpでradikoを録音する」の続きです。

    さくらのVPS上で録音できたはいいものの、flvでdumpしてきていたのでiPhoneで聴けないしファイルサイズも大きいし、というところが個人的にはとてもネックでした。

    flvをmp3に変換するのはいいとして、どのように同期させるか悩んでいたところにDropboxではどうだろうと思いました。

    もし、さくらのVPSにDropboxをインストール出来るのなら、あらゆる問題が一気に解決しそうです。ということで、やってみました。

    DropboxのCLI版のインストールにはPython 2.5以上が必要なので、まずはそちらをインストール。

    $ wget http://www.python.org/ftp/python/2.7.1/Python-2.7.1.tgz
    $ tar xvzf Python-2.7.1.tgz
    $ cd Python-2.7.1$ ./configure –prefix=/usr/local/Python-2.7.1
    $ make
    $ su make install

    Dropboxのダウンロードを行います。さくらのVPS標準OSはCentOS 5.5 x86_64なので、間違えないように。

    $ cd$ wget -O dropbox.tar.gz “http://www.dropbox.com/download/?plat=lnx.x86_64”
    $ tar -tzf dropbox.tar.gz
    $ tar -xvzf dropbox.tar.gz
    $ wget http://dl.getdropbox.com/u/6995/dbmakefakelib.py
    $ wget http://dl.getdropbox.com/u/6995/dbreadconfig.py
    $ wget http://www.getdropbox.com/download?dl=packages/dropbox.py

    これで起動します。

    $ ~/.dropbox-dist/dropboxd &
    This client is not linked to any account…
    Please visit https://www.dropbox.com/cli_link?host_id=7d44a557aa58f285f2da0x67334d02c1 to link this machine.

    すると、初回起動時は上記のようにこちらにアクセス!のようなリンクが表示されるので、ブラウザからアクセスしてください。ログインすることでユーザを判断するようです。

    $ /usr/local/Python-2.7.1/bin/python ~/dropbox.py statusDownloading 1 file (754.9 KB/sec, 14 min left)

    上記のコマンドで、ステータスを確認すると、同期中であることが分かります。

    試しに~/Dropboxの中にファイルを作ってみました。

    vi ~/Dropbox/Public/test.txt

    保存とほぼ同じタイミングで、Windowsクライアントでの同期が確認されました。

    参考: http://www.hyk-home.com/blog/infra/archives/2009/05/05-202601-137.html http://wiki.dropbox.com/TipsAndTricks/TextBasedLinuxInstall

    image

    次は、録音終了と共にFLVをmp3に変換します。こうしないとiPhoneで聴くことができません。

    まずはテスト。

    $ ffmpeg -y -i TBS_BAKUSHO_20101201T010001.flv -acodec libmp3lame TBS_BAKUSHO_20101201T010001.mp3

    このままだと何故かファイルサイズが1.4倍くらいになってしまった。2時間番組を録音するとFLV形式でも40MB以上になるので、mp3にしたらせめて2/3にはなってほしい。

    ビットレートやサンプリング周波数を変更してみる。

    $ ffmpeg -y -i TBS_BAKUSHO_20101201T010001.flv -ab 16 -acodec libmp3lame TBS_BAKUSHO_20101201T010001.mp3

    できたファイルは変わらず55MB。出来上がったmp3ファイルを調べてみるとビットレートに変化がない。オプションが効いていない。。

    もっと小さいファイルで実験しよう。下記のようにオプションの指定方法を変更。

    $  ffmpeg -y -i TBS_radiko_20101211T155501.flv -ab 32000 -ar 24000 -acodec libmp3lame TBS_radiko_20101211T155501.mp3

    こうすると見事にファイルサイズは小さくなりました。試しにこのタイミングでDropboxにファイルをつっこみ、iPhoneで再生を確認できました。

    先ほどの爆笑問題の2時間番組をこの方法でmp3にしてみる。どのくらいのファイルサイズになるだろうか。

    $ ffmpeg -y -i TBS_BAKUSHO_20101201T010001.flv -ab 32000 -ar 24000 -acodec libmp3lame TBS_BAKUSHO_20101201T010001.mp3

    結果は28MBほどに。音質の劣化もそこまで酷くないので、ひとまずはこれでいきますか。

    これを、cronが実行するファイルにも書き加え、元ファイルのflvを削除するように変更。

    1分間の動作テストを行う。

    $ ~/bin/radiko TBS 1 radiko >>$HOME/radio/radiko.log 2>&1 &

    mp3の空のファイルが作成されるだけで、うまくいかない。。試行錯誤のすえ、標準出力をログファイルに吐き出すと何故かmp3の部分で止まってしまっていた。ので、標準出力はすべて破棄するように変更。

    $ ~/bin/radiko TBS 1 radiko > /dev/null 2>&1

    併せてcrontabも変更。

    実際に1分間の録音の動作確認ができた。ファイルサイズも小さくなったのでめでたし。次は、Dropboxにもコピーする。できればシンボリックリンクがいい。そこで、テスト。

    $ ln -s TBS_radiko_20101211T164412.mp3 ~/Dropbox/Public/link.mp3

    シンボリックリンクを作成してみるも、Dropboxには認識されない。そこで、ハードリンクに切り替えてみる。

    $ ln TBS_radiko_20101211T164412.mp3 ~/Dropbox/Public/link.mp3

    こちらだと問題なさそうなので、録音終了後にDropboxにハードリンクを追加する作業をするようにする。

    これで、録音が完了するとmp3へ変換→元ファイル削除→Dropboxのフォルダへハードリンク追加まで完了。これによりiPhone同期、Windows同期まで完成。

    ■WEB上でmp3を再生できるようにする

    これを利用。超簡単にシンプルなmp3プレーヤーがくっつけられる。

    http://1bit.markwheeler.net/

    ファイルが増えても更新が不要なので、非常に便利。

    ■mysqlで録音したものを管理するためにテーブルを作成

    CREATE TABLE radio_list (uid int(5) auto_increment PRIMARY KEY,pid int(5) DEFAULT ‘0’ NOT NULL,filename varchar(100),time int(5),recorded_on DATETIME);
    CREATE TABLE radio_program (pid int(5) auto_increment PRIMARY KEY,program varchar(100));

    こんな感じです。他にもお気に入りの番組があれば、そちらも登録していきますが、今のところはJUNKだけで十分です。

    あとは、ひたすらラジオのコンテンツが降ってくるのを待つだけ!やったね!本心としては公開したいですが著作権が絡むため、そんなことはやっちゃいけません。完全に個人利用です。

    なので、URLは載せられませんがサイトのイメージとしてはこんな感じですよ。

    image

    今後は、大阪のラジオを聴くためにどうにかしたいのと、エラーを極力なくしていくことですね。radiko側の問題もありますが、万が一エラーになった場合に、自動でリトライする仕組みを作っていきたいと思います。

    ラジオ業界が、radiko.jpによってさらに盛り上がっていくことを願っています。「○○しながら」視聴できるメディアの強みを活かして、面白いことをどんどんやってください!前のエントリーでも書きましたが、radikoには是非ともオープン化の道へ進んでいって欲しいと思います。

    TBSラジオのJUNKの大ファンとして、まずは一度生で聴いてみることをおすすめします!

    TBS RADIO JUNK

    それでは!

    ※これは第1回8maki開発合宿中に作ったもののレポートでもあります。

    @8maki @twitbn @hyshhryk @pggm @twginriki @pandeiro245 @shinout @chicken800

    みなさん、お疲れさまでした。そして、諸々取り仕切ってくれた@8makiくん、本当にありがとうございました!

    # JUNK 伊集院光 深夜の馬鹿力 (TBS RADIO Mon. 1:00-3:00)
    0 1 * * Tue   $HOME/bin/radiko TBS 120 IJYUIN > /dev/null  2>&1
    # JUNK 爆笑問題カーボーイ (TBS RADIO Tue. 1:00-3:00)
    0 1 * * Wed   $HOME/bin/radiko TBS 120 BAKUSHO > /dev/null 2>&1
    # JUNK 山里亮太の不毛な議論 (TBS RADIO Wed. 1:00-3:00)
    0 1 * * Thu   $HOME/bin/radiko TBS 120 YAMASATO > /dev/null 2>&1
    # JUNK おぎやはぎのメガネびいき (TBS RADIO Thu. 1:00-3:00)
    0 1 * * Fri   $HOME/bin/radiko TBS 120 OGIYAHAGI > /dev/null 2>&1
    # JUNK バナナマンのバナナムーンGOLD (TBS RADIO Fri. 1:00-3:00)
    0 1 * * Sat   $HOME/bin/radiko TBS 120 BANANAMAN > /dev/null 2>&1# recording test53 16 * * Sat   $HOME/bin/radiko TBS 1 radiko > /dev/null 2>&1
    insert into radio_program (program) values(‘伊集院光の深夜の馬鹿力’);insert into radio_program (program) values(‘爆笑問題カーボーイ’);insert into radio_program (program) values(‘山里亮太の不毛な議論’);insert into radio_program (program) values(‘おぎやはぎのメガネびいき’);insert into radio_program (program) values(‘バナナマンのバナナムーンGOLD’);insert into radio_program (program) values(‘テスト用録音’);