To listen radiko with iPod

ここのところradikoの放送をiPodで聴くために試行錯誤していたのでメモ。


radikoのダウンロードに関してはいたちごっこが続いているようで、サイトからブロックされるたびにrtmpdumpやffmpegの引数の情報がネットに流れている。
私もradikaやradikoolなどの専用アプリやrtmpdump、ffmpegなどのコマンドラインツールを試したが最終的にはrtmpdumpに落ち着いた。
radikaやradikoolなどの専用アプリは番組表から予約ができて便利なのだが、頻繁にバージョンアップするし、常駐しておかないといけないし、結構不具合も多く不安定なので、ウィンドウズのタスクを使用するようになった。rtmpdumpのコマンドを記述したバッチファイルをタスクとして登録しておけば不安定なアプリを常駐させずに済む。


rtmpdumpはオリジナルのメディアデータを保存するだけなのでCPUの負荷はほとんどないといっていい。
でもファイルフォーマットがFLVなのでそのままではiPodで聴くことはできない。
そこでffmpegを使用する。

ffmpeg -i input.flv -acodec copy output.mp4

これでMP4フォーマットのファイルが作成できる。ファイルフォーマットの変換だけなので再エンコードは行われず一瞬で終わる。
librtmpをリンクしたffmpegならば"-i"オプションの引数にrtmpdumpと同じコマンドを指定することでダウンロードしながらファイルフォーマットの変換が可能だ。CPUの負荷もrtmpdumpでダウンロードするのと変わらない。
私の使っているffmpegもlibrtmpをリンクしているのでこれが可能なのだが、rtmpdumpに比べると不安定な気がするのでffmpegは変換作業のみに使用している。


さて上記で作成したMP4ファイルだが、QuickTimeの7.6.5では再生が可能なのだが最新版の7.6.6では不正な記述があるとかでエラーとなってしまう。(ファイルの関連づけでQuickTime Playerを起動したときにエラーになると当然エラー終了するのだが、なぜかQuickTime Player本体がメモリに残ってしまい。その後QuickTime Playerを起動できなくなってしまう。。。AppleWindows版のアプリは不安定だなぁ。。。Macではちゃんと動いているのだろうか?)

MP4のコンポーネントの情報とメディアデータ中の情報に齟齬があってエラーになっているものと考えてMP4の方を修正すればなんとかなるのでは、とMP4Boxというツールを使ってMP4ファイルを作ってみた。

ffmpeg -i input.flv -acodec copy output.aac
mp4box -add output.aac:sbr output.mp4

だめだった。となるとメディアデータのほうか。再エンコードするしかないのかなぁ。


radikoolではiTunesに登録できるM4Aフォーマットのファイルを作成するために試行錯誤の結果再エンコードしていて、結果、できたファイルは音質はまあまあなのだがファイルサイズがオリジナルの2倍になってしまっている。
radikoolはffmpegを使っていて

ffmpeg -i input.flv -ar 24000 -ab 128k -profile aac_low output.m4a

ってかんじ。ビットレートを48kにするとファイルサイズはオリジナルと同じくらいになるが音が歪んでしまい、聴いていると気持ち悪くなる。


エンコードするならファイルサイズは小さくなって欲しい。いろいろググった結果、ビットレートが96k以下ならHEAACというAACの拡張版が良いらしいことが判った。
で、エンコーダはNeroAACCodecというフリーのものがあったのでこれを使ってみる。

ffmpeg -i input.flv output.wav
neroaacenc -q 0.1 -fi output.wav -fo output.m4a

できたファイルはオリジナルの半分くらいのファイルサイズでビットレートは26k、でも音質は良好で歪みもない。
かかった時間もトータルで10分程度。(CPU:E5200)
neroaacencは入力にWAVフォーマットのファイルしか使えないため一旦ffmpegで無圧縮のWAVファイルに変換するので一時的に大容量のディスク領域が必要だが、それでもffmpegに比べるとこちらのほうが断然良い。
iPodでも問題なく聴くことができた。


ところでffmpegの"-t"オプションを指定しないと7000sec位で終了してしまうのだがバグかしら?