FLVファイルからAACファイルに、AACファイルからM4Aファイルに無劣化で変換する

らじる★らじる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).

MP4Box

インストール

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ファイルに変換

MP4BoxSpectral Band Replicationの情報を付加してM4Aファイルを作成します。 MP4BoxMPBが大文字だったので注意です・・

$ 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 Documentation

が、FFmpegでAACファイルを抽出した時のOutput #0, adts, to 'out.aac':にあるadts

放送では ADTS (Audio Data Transport Stream) と呼ばれるヘッダ形式で伝送されることが多い。

AAC - Wikipedia

ということのようで、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 と音質が改善されている。

HE-AAC - Wikipedia

自分は今までiTunes Plusの256 kbpsにしていたので、これからはHE-AACにしてみようかと思っています。 今まで取り込んだものは、ここから更に変換してしまうと再エンコーディングになってしまうので、圧縮されたものを更に圧縮していて、失われるものが大きいんじゃないか?ということでそのままにしようと思います。 CDも圧縮されているでしょうから本当に気持ち的な問題ですね。

終わり

iTunesで再生できるAACファイルが抽出できましたので、らじる★らじるradiko.jpで録音したファイルが個人で楽しめるものにできそうです。

参考

28 January 2018 追記

MP4Box で変換した m4a ファイルは、iOS の OneDrive で再生できませんでしたので、再生できるようにする記事を書きました。