FreeBSDでラジコを録音し、iTunesで利用できるように変換し、自分専用のPodcastとして運用する計画ですが、現時点で複数の課題が残っています。
- 録音時にサーバーや経路が混雑する(推測です)と、録音ファイルが分割されてしまう。
- flv → m4a ファイル変換で flvに含まれているm4aファイルを ffmpeg の -acodec “copy” オプションで取り出すと、iTunesでの再生に問題が発生する。
対策1
録音が途中で分割されてしまう現象の対策ですが、rtmpdump コマンドに –timeout <秒> オプションがあることを発見しました。このオプションを使用しない場合、120秒がデフォルトとして使用されるということなので、180秒にして運用を開始したところです。こんな感じ。
timeout=180 rtmpdump -v \ -r "rtmpe://w-radiko.smartstream.ne.jp/" \ --playpath "simul-stream.stream" \ --app "${channel}/_definst_" \ -W ${playerurl} \ -C S:"" -C S:"" -C S:"" -C S:${authtoken} \ --live -B ${seconds} \ --timeout ${timeout} \ --flv ${output}
対策2
「ffmpeg -loglevel quiet -y -i “${output}” -acodec copy radiko_out.m4a」 で flv ファイルから取り出した m4a ファイルを iTunes に読み込ませると、
- ファイルの日付が 1970/1/1 になる
- 再生しようとすると、iTuesからのレスポンスが数分間なくなる。ファイルを処理しているものと思います。
- 約2倍の録音時間ファイルとして認識されます。
という現象が発生しますが、これはファイルに含まれるメタ情報または音声データにiTunesが問題なく扱える範囲を越える情報を含んでいるためだと推測しています。
ファイルの日付対策としては、「-timestamp now」オプションを使うことによってある程度解決できることがわかりました。
録音ファイルをiTunesに読み込ませた直後からiTunesのレスポンスがしばらく無くなることと、2倍の時間のファイルとして認識される現象に関しては、ffmpeg とiTunesでのファイル形式認識に違いがあるためだと推測しています。ビットレートとサンプルレートを ffmpeg -i コマンドで確認すると、以下のように表示されます。
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'TBS_201304221301_1.m4a': Metadata: major_brand : M4A minor_version : 512 compatible_brands: isomiso2 creation_time : 1970-01-01 00:00:00 encoder : Lavf52.111.0 Duration: 02:28:56.06, start: 0.000000, bitrate: 49 kb/s Stream #0.0(und): Audio: aac, 48000 Hz, stereo, s16, 46 kb/s Metadata: creation_time : 1970-01-01 00:00:00 At least one output file must be specified
iTunes でファイルの情報を確認すると、
- ビットレート: 46kbps
- サンプルレート: 24.000kHz
- プロファイル: Low Complexity
- チャンネル: ステレオ
- エンコード方式: Lavf52.111.0
と認識されていることがわかりました。
サンプルレートの取り扱いがffmpeg と iTunesでことなるところが怪しいようです。
ffmpeg に「-ab 46k -ar 48k -acodec aac」 というオプションを付けて変換すれば、iTunesでもサンプルレート 48kHzとして認識されるファイルになることが判明しましたが、「-acodec copy」 とする場合はflvの中のm4aを取り出すだけなので一瞬で変換できるのに対し、ビットレートを指定して変換すると CPUパワーを使って変換することになります。もし、copy モードで出力した m4a ファイルのメタ情報を直接編集してiTunesで問題ないなら、そっちの方法を選びたいところですが、次の課題とします。
現時点で rtmpdump コマンドで取り出した flv から m4a ファイルを生成するコマンドは、次のようにしました。
ffmpeg -loglevel quiet -y -i "${output}" -timestamp now -ab 46k -ar 48k -strict experimental -acodec aac "${m4a_output}"
録音ファイルが途中で分割される現象と合わせて、この修正結果で 1~2週間 様子を見たいと考えています。
その他、ビットレート、サンプルレート、出力ファイル形式(m4a or mp3)を変更してファイルサイズ、変換速度、聞きやすさの最適値を知りたいところです。現在1時間が20MBくらいのファイルサイズになっていますが、今の品質が若干劣化する程度で録音時間1時間が10MBくらいに収まれば「変換時間=録音時間」になったとしても我慢する価値がある気がします。