・「らじる★らじる」をrtmpdumpで
従来、「らじる★らじる」はwmvでも提供されていたけれど、 どうやら8月末でwmv配信は終了してMacromedia Flashオンリーになったらしい。
wmvは近い将来には止まるだろうなぁ、、と思っていたので、 いよいよその時が来たか、という感じ。 一方、セキュリティがらみの問題の多さからFlashは使わないようにしよう、 という動きもあるので、これからどうなるかはよく分からないところ
一応、Linux環境でMacromedia Flashな配信を聞くための、 rtmpdumpというコマンドが開発されていて、 それを用いた「らじる★らじる」用のコードもあちこちで公開されているので、 このあたりを参考に、 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を同時に動かすよりはトラブルが起きにくいかな、と期待している。