らじる★らじる、radiko.jpで録音したファイルはFlash Videoというコンテナ型のファイルフォーマットなのでそのままだとMacで再生しづらいです。 今回はFLVファイルからAACファイルを抽出することについて調べてみました。
環境
- OS X El Capitan バージョン 10.11.3
- Homebrew バージョン 0.9.5
- FFmpeg バージョン 2.8.6
FFmpeg?
FFmpeg is the leading multimedia framework, able to decode, encode, transcode, mux, demux, stream, filter and play pretty much anything that humans and machines have created.
インストール
Homebrewを先にインストールしておきます。
FFmpegを使って抽出しますのでFFmpegをインストールします。
$ brew install ffmpeg
==> Downloading https://homebrew.bintray.com/bottles/ffmpeg-2.8.6.el_capitan.bot
######################################################################## 100.0%
==> Pouring ffmpeg-2.8.6.el_capitan.bottle.tar.gz
==> Caveats
FFmpeg has been built without libfaac for licensing reasons;
libvo-aacenc is used by default.
To install with libfaac, you can:
brew reinstall ffmpeg --with-faac
You can also use the experimental FFmpeg encoder, libfdk-aac, or
libvo_aacenc to encode AAC audio:
ffmpeg -i input.wav -c:a aac -strict experimental output.m4a
Or:
brew reinstall ffmpeg --with-fdk-aac
ffmpeg -i input.wav -c:a libfdk_aac output.m4a
==> Summary
🍺 /usr/local/Cellar/ffmpeg/2.8.6: 210 files, 44.4M
確認
次のように入力するとFLVファイルの内容が確認できます。
filename.flv
は実際のファイル名に変更します。
ここではらじる★らじるから保存したファイルを使っています。
$ ffmpeg -i filename.flv
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
At least one output file must be specified
これを見るとAudio: aac (HE-AAC)
ってあります。
FLVファイルはコンテナフォーマットというもので、多くの種類の音声や動画を含むことができるそうです。
このファイルは音声だけがaac (HE-AAC)
のフォーマットで含まれています。
抽出
このファイルから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%
オプションについては次のところを参考にしました。
filename.flv
は最初に確認したファイルです。
out.m4a
は抽出した後にできるファイルです。
-c:a copy
は音声をそのまま(エンコード、デコードを省略して)出力します。
拡張子の.flv
や.aac
は、これを元にファイルのフォーマットを判断しているようなので、この通りに指定しておいた方が良さそうです。
そうじゃない場合は、-f fmt (input/output)
のオプションを指定する必要があります。
最初、ここで抽出した後にできるファイルの拡張子を.m4a
にしていたんですけど、無理矢理MP4のコンテナフォーマットにしているようで、Codec for stream 0 does not use global headers but container format requires global headers
っていう警告が出ていたりしたので素直に.aac
にしました。
抽出しているだけなので一瞬で終わりました。
ファイルサイズ
抽出しているだけなので、音質は変わっていないと思います。 1時間程度録音したファイルのサイズは抽出前が23.7MB程度で、抽出後が22.9MB程度でした。
$ 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
終わり
AACファイルを抽出したのでFinderのクイックルックや再生機能で再生できました。 でもiTunesでは再生できませんでした。
参考
10 February 2016 追記
iTunesで再生できるようになるまでを書いてみました。