コメント頂きました
NHK語学講座のラジオ番組ストリーミングを取得するRubyスクリプトgogakuondemand.rb(v2.0→2.2) - 別館 子子子子子子(ねこのここねこ)
のコメント欄にこのようなコメントを頂きました。
ma 2013/07/31 15:56
gogakuondemend.rb v2.2ベースに、大量ダウンロード時にうれしい時間短縮する案を考えました。AACのままでの保存です。
def convert_mp4_mp3のcommand_ffmpegにおいて
-ab 64k -id3v2_version 3
を
-absf aac_adtstoasc -acodec copy
に、
#{title_path}.mp3
を
#{title_path}.m4a
に変更すると、変換は一瞬(1秒ぐらい)で終わるのでファイル数が多いときには嬉しいです。
AACが扱えないプレイヤーはほとんどないと(勝手に)思いますので。
必要ならばダウンロード終了後にオフラインでゆっくり変換できますね。
ストリーミングファイルの技術解説
NHK語学講座ストリーミングはHLS(HTTP Live Streaming)というフォーマットで配信されています。
HLSでは、エンコーダーによってデジタルデータ化された映像・音声信号をファイル化する際に、10秒単位の「MPEG-2 TS」として細切れにし、暗号化して、小さな連続したファイルを作ります。
そして、この細切れになった「MPEG-2 TS」ファイルの再生順や、暗号化の鍵、コンテンツのバリエーションなどを書き込んだM3U8形式の「プレイリスト」に記載しておきます。そして、これらをWebサーバーから配信する、という仕組みになっています。
第554回:HLS形式 とは - ケータイ Watch Watch
「MPEG-2 TS」に使える音声フォーマットは各種あるのですが、NHK語学講座ストリーミングではaacが使われています。
例として「実践ビジネス英語_2013_07_24」のFFmpegインプットステータスを見てみます。
Input #0, hls,applehttp, from 'https://nhk-vh.akamaihd.net/i/gogaku-stream/mp4/13-ebj-4231-766.mp4/master.m3u8': Duration: 00:15:01.00, start: 0.100667, bitrate: 0 kb/s Program 0 Metadata: variant_bitrate : 42000 Stream #0:0: Audio: aac ([15][0][0][0] / 0x000F), 24000 Hz, stereo, fltp, 45 kb/s Metadata: variant_bitrate : 42000
つまり、ストリーミングのファイルをそのまま繋げればaacになります。maさんの提案は、aacそのままを使ったらaacからmp3へのエンコード時間が不要になりますよ、との提案なのです。
gogakuondemand.rbでmp3にしていた理由
私は基本的にmp3でエンコードしたラジオ録音ファイルを管理しています。というのは、
ID3タグが使えるのはmp3だけだ
と思い込んでいたためです。
mp4/m4a/aacでもID3タグが使える
しかし、調べたところ、mp4/m4a/aacでもID3タグが使えることが分かりました。
拡張子.m4aはAppleが使いだしたもので、MP4コンテナにAAC形式かAppleロスレス形式の音声データや楽曲情報(タグ)を入れたものです。本来のルールからすると拡張子.mp4にすべきものですが、iPod/iTunesの隆盛により今や一般化しています。
拡張子.aacのファイルは、AAC形式の音声データをコンテナなどに入れずに裸のままファイルにしたものです。楽曲情報(タグ)などが必要な場合はMP3と同じID3タグか、Monkey's Audioと同じAPEタグを付ける場合が多いようです。
(AACの場合)音声データ形式は同じでもファイルの構造が異なりますので、拡張子だけを.m4a→.aacなどと書き換えてはいけません。.m4a→.mp4、.3gpならいずれもMP4コンテナなので大抵問題ありませんが。
音声ファイルとしての機能、性能面での優劣は殆どありませんが、iPod/iTunesのおかげで.m4aは現在デファクト スタンダード的な地位にあり、.m4aの方が対応ソフトや機器が多いと思います。
拡張子.m4aと.aacは一緒ですか? - iTunesでAAC形式で取り込むと... - Yahoo!知恵袋
試してみた
で、FFmpegのオプションを変えて、上記の「実践ビジネス英語_2013_07_24」をm4aに変換した際のファイルサイズを比較してみました。
なお、maさんは「-id3v2_version 3」も置き換えるように書いておられましたが、これはID3v2タグのバージョン3を指定するものなので、削るとID3タグに問題が生じます。ので、これは必須とします。
★ -ab 64k ファイルサイズ ○ ○ 4.9MB ○ × 4.9MB × ○ 6.1MB × × 7.3MB
ということで「-absf aac_adtstoasc -acodec copy」オプションを付けるとファイルサイズが小さくなりました。そして「-ab 64k」なしのほうが若干音が細かく感じられました。
またm4aファイルなのでID3タグが使えています。
Metadata: major_brand : M4A minor_version : 512 compatible_brands: isomiso2 title : 実践ビジネス英語_2013_07_24 artist : NHK album : 実践ビジネス英語 date : 2013 encoder : Lavf54.63.104 genre : Speech Duration: 00:15:00.86, start: 0.000000, bitrate: 43 kb/s Stream #0:0(und): Audio: aac (mp4a / 0x6134706D), 24000 Hz, stereo, fltp, 42 kb/s
結論
ので、mp3以外に、「-absf aac_adtstoasc -acodec copy」オプションを付けたm4aファイルを作れるオプションを備えるように、いずれgogakuondemand.rbをバージョンアップしようと思っています。(コレが書きたかったw)
→v3.4で対応しました(8/9)。