walkman(NW-A35)にradikoや「らじるらじる」のストリーミングデータを転送しようとしたときにハマった話

前提1:再エンコード(re-encode)したくない
前提2:radikoや「らじるらじる」はHE-AAC形式
当初の手順:
  • 1.radikoや「らじるらじる」からFLVで保存(ここでは解説しない)
  • 2.FFMPEGでraw AACに以下のように変換
ffmpeg -vn -i input.flv -acodec copy input.aac
  • 3.MP4BOXでm4aに以下のように変換
MP4Box -add input.aac input.m4a -new
なぜかこれではうまくいかない。音声の速度とピッチが1/2になっているように感じられる。


これを次に変更
  • 3.MP4BOXでm4aに変換するが、以下のように -sbr オプションをつける必要があった
MP4Box -sbr -add input.aac input.m4a -new

これはMp4Bpxのドキュメントによると

Note : MP4Box cannot detect whether AAC input is regular or SBR AAC, so you must use one fo these options if you want to import AAC SBR files.

とある。
要は、MP4BOXはAAC-LCかHE-AACかを判断できない。
よって、HE-AACのときには手動で-sbr オプションが必要。

ちなみに、HE-AACかどうかはMediaInfoなどで確認できる

f:id:pylab:20170620233249p:plain

pythonのスライシングについて([::-1],[low:high:step]などについて)

[low:high:step]: lowからhighまでstepごとに選択

>>> l=[1,2,3,4,5,6,7,8,9]
>>> l[4::2]
[5, 7, 9]
>>> l[4::1]
[5, 6, 7, 8, 9]
>>> l[4::3]
[5, 8]
>>> l[::3]
[1, 4, 7]
>>> l[:-1]
[1, 2, 3, 4, 5, 6, 7, 8]
>>> l[::-1]
[9, 8, 7, 6, 5, 4, 3, 2, 1]
>>> l[2:7:2]
[3, 5, 7]
>>> l[2:8:2]
[3, 5, 7]
>>> l[2:6:2]
[3, 5]
>>> l[2:7:3]
[3, 6]
>>> l[1:7:3]
[2, 5]
>>> l[1:8:3]
[2, 5, 8]
>>>