LoginSignup
8
9

More than 3 years have passed since last update.

mp4box と ffmpeg で m4a を mp3 に変換する

Last updated at Posted at 2015-11-04

音声の m4a ファイルを mp3 へ変換するのにネット検索で見つかる方法を使っていたら、Windows Media Player で警告が出て、その対処をした際のメモ書きです。
ちなみに自分は MacOSX Yosemite で作業してます。ffmpeg と mp4box は brew でインストールしました。

よくみる方法と問題

$ ffmpeg foo.m4a -acodec libmp3lame -f mp3 foo.mp3

このコマンドで生成した mp3 ファイルを Windows の Media Player で再生したところ 「拡張子がmp3とは違うが、ファイルによっては再生出来るものもある」的な警告がでました。音声の再生自体は出来ます。(Windows10 では特に問題なかったので、Windows7,8 辺りまでの問題かも)
なお、MacOS の QuickTime では特に不都合がないです。

原因推測

(前提知識) 動画ファイルは Atom、(いまどきだと MP4コンテナ)1と呼ばれるバイナリ形式で保存する事が多いです。これは様々なデータを含む事ができる汎用的な形式でコンテナと表現されます。

m4a はこの Atom コンテナで AAC 音声ストリームを格納します。

上記のコマンドだと m4a のAtomコンテナをそのまま引き継いで、Atomコンテナに包まれた mp3 ファイルが生成されます。

ffmpeg.png

  • ffmpeg -i foo.mp3 でコンテナを確認
$ ffmpeg -i foo.mp3
<略>
Input #0, mp3, from 'foo.mp3':
  Metadata:
    major_brand     : M4A
    minor_version   : 0
    compatible_brands: M4A mp42isom

Windows Media Player は .mp3 の拡張子でファイルを受け取った際、RIFF コンテナに包まれた mp3 か、生の mp3 ストリームを期待していて、Atom コンテナだと都合が悪いようです。

多分正しい方法

track 1 に音声が入っていると仮定して (mp4box -info foo.m4a で調べられます)

$ mp4box -raw 1 foo.m4a # 生の AAC ストリームを抜き出す
$ ffmpeg -i foo_track1.aac foo.mp3

まず mp4box で音声の AAC ストリームだけ抜き出して、それを MP3 ストリームに変換します。

mp4box+ffmpeg.png

  • ffmpeg -i foo.mp3 でコンテナ(に入ってないの)を確認
$ ffmpeg -i foo.mp3
<略>
Input #0, mp3, from 'foo.mp3':
  Metadata:
    encoder         : Lavf56.25.101
  Duration: 00:02:47.63, start: 0.025057, bitrate: 64 kb/s
    Stream #0:0: Audio: mp3, 44100 Hz, mono, s16p, 64 kb/s

蛇足的なメモ

  • シェルでまとめて処理するなら (bash版)
for i in *.m4a ;
  do b=`basename $i .m4a` ;
  mp4box -raw 1 $i ; ffmpeg -i "$b"_track1.aac $b.mp3 ;
  done

最後に

ffmpeg だけでもオプションで頑張れば出来そうだけど、誰か方法知りませんか?

コメントを頂きました。オプションで対応できるようです(元々の問題を再現できなかったので未確認のまま)。こちらを参考にして下さい。

$ ffmpeg -i input.wav -write_xing 0 -id3v2_version 0 out.mp3

  1. 仕様としてはISOBMFF形式(ISO/IEC 14496-12)を参照の事。 

8
9
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
9