らじる★らじる、radiko.jpで録音したファイルからAACファイルを抽出しましたが、MacのFinderから再生することはできるんですけど、iTunesでは再生できませんでした。 なので今回はiTunesで再生できるようになるまでを調べてみました。
環境
- OS X El Capitan バージョン 10.11.3
- Homebrew バージョン 0.9.5
- MP4Box バージョン 0.5.1 rev4065
MP4Box?
The multimedia packager available in GPAC is called MP4Box. It can be used for performing many manipulations on multimedia files like AVI, MPG, TS, but mostly on ISO media files (e.g. MP4, 3GP).
インストール
Homebrewを先にインストールしておきます。
FFmpegを先にインストールしておきます。
MP4Boxを使って変換しますのでMP4Boxをインストールします。
$ brew install mp4box
==> Downloading https://github.com/gpac/gpac/archive/v0.5.2.tar.gz
==> Downloading from https://codeload.github.com/gpac/gpac/tar.gz/v0.5.2
######################################################################## 100.0%
==> ./configure --disable-wx --prefix=/usr/local/Cellar/gpac/0.5.2 --mandir=/usr
==> make
==> make install
🍺 /usr/local/Cellar/gpac/0.5.2: 112 files, 5.2M, built in 1 minute 42 seconds
Homebrewって便利です。
FLVファイルからAACファイルを抽出
前回と同様にFLVファイルからAACファイルを抽出します。
$ ffmpeg -i filename.flv -c:a copy out.aac
ffmpeg version 2.8.6 Copyright (c) 2000-2016 the FFmpeg developers
built with Apple LLVM version 7.0.2 (clang-700.1.81)
configuration: --prefix=/usr/local/Cellar/ffmpeg/2.8.6 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-opencl --enable-libx264 --enable-libmp3lame --enable-libvo-aacenc --enable-libxvid --enable-vda
libavutil 54. 31.100 / 54. 31.100
libavcodec 56. 60.100 / 56. 60.100
libavformat 56. 40.101 / 56. 40.101
libavdevice 56. 4.100 / 56. 4.100
libavfilter 5. 40.101 / 5. 40.101
libavresample 2. 1. 0 / 2. 1. 0
libswscale 3. 1.101 / 3. 1.101
libswresample 1. 2.101 / 1. 2.101
libpostproc 53. 3.100 / 53. 3.100
Input #0, flv, from 'filename.flv':
Duration: 01:01:57.97, start: 0.000000, bitrate: 51 kb/s
Stream #0:0: Audio: aac (HE-AAC), 48000 Hz, stereo, fltp, 49 kb/s
Output #0, adts, to 'out.aac':
Metadata:
encoder : Lavf56.40.101
Stream #0:0: Audio: aac, 48000 Hz, stereo, 49 kb/s
Stream mapping:
Stream #0:0 -> #0:0 (copy)
Press [q] to stop, [?] for help
size= 22381kB time=01:01:58.01 bitrate= 49.3kbits/s
video:0kB audio:21785kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 2.734391%
AACファイルからM4Aファイルに変換
MP4Box
でSpectral Band Replicationの情報を付加してM4Aファイルを作成します。
MP4Box
はMP
とB
が大文字だったので注意です・・
$ MP4Box -add out.aac out.m4a -sbr
AAC ADTS import SBR - sample rate 24000 - MPEG-4 audio - 2 channels
Setting up iTunes/iPod file...
Saving to out.m4a: 0.500 secs Interleaving
M4AのコンテナフォーマットにAACファイルを含めているだけなので、一瞬で終わりました。 エンコード、デコードはしていません。
ファイルサイズ
1時間程度録音したファイルのサイズは、FLVファイルで23.7MB程度、AACファイルで22.9MB程度、M4Aファイルで22.6MB程度でした。
$ ls -l
-rw-r--r-- 1 user staff 23789474 2 7 18:00 filename.flv
-rw-r--r-- 1 user staff 22917952 2 9 22:12 out.aac
-rw-r--r-- 1 user staff 22688921 2 9 22:12 out.m4a
AAC(Advanced Audio Coding, 先進的音響符号化)
ここからはAACについて調べてみたことを書いてみました。
MPEG-2 AACで標準化されたAAC(Advanced Audio Coding)っていうのは3つのプロファイルがあるようです。
- AAC Main
- AAC LC(Low Complexity)
- AAC SSR(Scalable Sample Rate)
HE-AAC (High-Efficiency Advanced Audio Coding)
上のAAC LCがコアとなってSBR(Spectral Band Replication、スペクトル帯域複製)やPS(Parametric Stereo)のツールで圧縮効率を向上させたものとしてHE-AACというプロファイルがあるようです。
- HE-AAC v1
- HE-AAC v2
らじる★らじるやradiko.jpから保存したFLVファイルの中にあるAACは、FFmpegでファイルの内容を確認した時にAudio: aac (HE-AAC)
と表示されることからHE-AACなんだと思います。
HE-AACはiTunesで再生できる認識なんですけど。
FFmpegは拡張子からファイルのフォーマットを自動的に判断するようです
-f fmt (input/output)
Force input or output file format. The format is normally auto detected for input files and guessed from the file extension for output files, so this option is not needed in most cases.
が、FFmpegでAACファイルを抽出した時のOutput #0, adts, to 'out.aac':
にあるadts
は
放送では ADTS (Audio Data Transport Stream) と呼ばれるヘッダ形式で伝送されることが多い。
ということのようで、ADTSのフォーマットでファイルが作成されていることがよくないからiTunesで再生できないのかな・・
FFmpegでAACファイルを抽出して、MP4BoxでSBRを追加しているので、抽出の時にHE-AACであるべきところのSBRが失われているように思うんですけど、これらをまとめて抽出する時にHE-AACとして抽出して、M4Aファイルを一発で作成するような簡単な方法は今のところ見つけられませんでした。
iTunesのHE-AAC
今回、AACファイルの種類がこんなにあることを知ったんですけど、iTunesにもHE-AACのエンコードがあるようでした。
iTunesのメニューから環境設定...
-一般
-CDがセットされたとき:の読み込み設定...
を選択します。
読み込み方法
からAACエンコーダ
、設定
からカスタム
を選択します。
High Efficiencyエンコーディング(HE)を使用
にチェックすると使えるようです。
このときステレオビットレート:
を48 kbps
以下にすると理論的には効果を発揮するようです。
(64 kbpsが最低でしたけど・・)
こんな低いビットレートで音質は大丈夫か?と思いますが、理論的にはCDと同じ音質程度でそれまでのAACの半分程度のファイルサイズになるようです。
HE-AAC では、Coding Technologiesがmp3PROで採用している Spectral Band Replication(SBR)技術をAACに組み込むことにより、再生帯域を拡大して主に低ビットレート(128kbps以下[1])での音質(圧縮効率)を大幅に向上させている。
HE-AAC v2 では、さらなる低ビットレート (48kbps以下[1])で音質を改善している。
高音域と中低音を分離した結果、「48kbps程度のレートでCDの音質を実現している」とされる。48kbpsでMUSHRAが80点 (Excellent) である。24kbpsでは HE-AAC v2 で Good である。全てのビットレートで AAC < HE-AAC v1 < HE-AAC v2 と音質が改善されている。
自分は今までiTunes Plusの256 kbpsにしていたので、これからはHE-AACにしてみようかと思っています。 今まで取り込んだものは、ここから更に変換してしまうと再エンコーディングになってしまうので、圧縮されたものを更に圧縮していて、失われるものが大きいんじゃないか?ということでそのままにしようと思います。 CDも圧縮されているでしょうから本当に気持ち的な問題ですね。
終わり
iTunesで再生できるAACファイルが抽出できましたので、らじる★らじる、radiko.jpで録音したファイルが個人で楽しめるものにできそうです。
参考
28 January 2018 追記
MP4Box で変換した m4a ファイルは、iOS の OneDrive で再生できませんでしたので、再生できるようにする記事を書きました。