[[diary/Kojima]]

・「らじる★らじる」をrtmpdumpで

従来、「らじる★らじる」はwmvでも提供されていたけれど、
どうやら8月末でwmv配信は終了してMacromedia Flashオンリーになったらしい。

 wmvは近い将来には止まるだろうなぁ、、と思っていたので、
 いよいよその時が来たか、という感じ。
 一方、セキュリティがらみの問題の多さからFlashは使わないようにしよう、
 という動きもあるので、これからどうなるかはよく分からないところ

一応、Linux環境でMacromedia Flashな配信を聞くための、
rtmpdumpというコマンドが開発されていて、
それを用いた「らじる★らじる」用のコードもあちこちで公開されているので、
[[このあたり:https://gist.github.com/riocampos/5656450]]を参考に、
radiru_rec.py なコードをイジってみた。

ざっくりといじった感じ、rtmpdump で落ちてくるMacromedia Flashは、
音声の圧縮にAACを使ってはいるものの、Flashなコンテナ(flv)に入っているので、
そのままではMP4オーディオに対応しているはずのWalkmanでは再生できなかった。

 $ file 2015-09-03-17-20_音楽遊覧飛行.flv 
 2015-09-03-17-20_音楽遊覧飛行.flv: Macromedia Flash Video

CODECそのものはAACなんで、ffmpeg で -acodec copy を指定して、
コンテナ形式を変更してやれば再エンコードせずに移せる感じ。

 $ ffmpeg -i 2015-09-03-17-20_音楽遊覧飛行.flv -acodec copy 2015-09-03-17-20_音楽遊覧飛行.m4a
 $ file 2015-09-03-17-20_音楽遊覧飛行.m4a 
 2015-09-03-17-20_音楽遊覧飛行.m4a: ISO Media, Apple iTunes ALAC/AAC-LC (.M4A) Audio

コード全体はもう少し動作の確認をしてから公開するつもりだけど、
radiru_rec.py の中心部分はこんな感じにしている。

    if channel == 'r1':
        rtmp='rtmpe://netradio-r1-flash.nhk.jp'
        playpath='NetRadio_R1_flash@63346'
    elif channel == 'r2':
        rtmp='rtmpe://netradio-r2-flash.nhk.jp'
        playpath='NetRadio_R2_flash@63342'
    elif channel == 'fm':
        rtmp='rtmpe://netradio-fm-flash.nhk.jp'
        playpath='NetRadio_FM_flash@63343'
    ...
    lines = []
    lines.append("#!/bin/sh")
    lines.append("flvfile={0}/{1}.flv".format(musicdir, title))
    lines.append("m4afile={0}/{1}.m4a".format(musicdir, title))
    lines.append("(rtmpdump --rtmp {0} --playpath {1} --app \"live\" 
      --swfVfy \'http://www3.nhk.or.jp/netradio/files/swf/rtmpe.swf\' 
      --quiet --live --stop {2} -o $flvfile ) &".format(rtmp, playpath, sduration))
    lines.append("sleep 1m")
    lines.append("radiru_noa.py {0} $m4afile".format(channel))
    lines.append("sleep {0}m".format(duration))
    lines.append("ffmpeg -loglevel quiet -i \"$flvfile\" -acodec copy "$m4afile\" ")
    lines.append("")
    lines.append("/bin/rm -f \"$flvfile\"")
    lines.append("radiru_tag.py \"$m4afile\"")
    lines.append("rm -f {}".format(scriptname))
    lines.append("")
    script = "\n".join(lines)

生成したシェルスクリプトをatの時間指定で実行する、という方針は変わらないけど、
mplayerとlameを使っていたのをrtmpdumpとffmpegに変えた、って感じ。

ざっと見、mp3だと15MBくらいだった15分の語学講座が、AAC形式のm4aだと5.5MBぐらいになるので、技術の進歩はすごいなぁ、、と思うところ。

録音のプロセスはrtmpdump一つだけになったので、mplayerとlameを同時に動かすよりはトラブルが起きにくいかな、と期待している。
- rtmpdump-2.4はPlamo-5.3.1にも入っている(P2)けれど共有ライブラリが librtmp.so.0 で不安定。よく分からないけど途中でつかえたりするみたい。最近のgitにあるlibrtmp.so.1だとそういうトラブルは無いので、rtmpdump-2.4 + librtmp.so.1 が必要条件みたい。 -- [[kojima]] &new{2015-09-03 (木) 21:34:27};
- rtmpdump-2.4はPlamo-5.3.1にも入っている(P2)けれど共有ライブラリが librtmp.so.0 で不安定。よく分からないけど途中でつかえたりするみたい。最近のgitにあるlibrtmp.so.1だとそういうトラブルは無いので、rtmpdump-2.4 + librtmp.so.1 が必要条件みたい。一応、P3でパッケージ化もしてはいる。 -- [[kojima]] &new{2015-09-03 (木) 21:34:27};

#comment

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS