MP3 ファイル形式
MPEG-1/2 Audio Layer III。もっとも普及した非可逆音声形式。
- MIME タイプ
- audio/mpeg
- 拡張子
- .mp3
- カテゴリ
- 音声
マジックナンバー(ファイル署名)
| 0x00000000 | 494433 | ID3 | 'ID3' metadata tag |
タグのない MP3 は代わりに MPEG フレーム同期で始まります。FF に続いて上位 3 ビットが立ったバイトです。
MP3 形式について
MP3 は携帯型デジタル音楽を一般に広めた形式で、聴覚の知覚モデルを使ってほとんどの人が聞き取れない情報を捨て、音声を生のおよそ 10 分の 1 まで縮めます。実のところコンテナと呼べるものではありません。MP3 ファイルは独立したフレームがただ並んだもので、1 フレームはおよそ 26 ミリ秒、それぞれが自分のビットレート・サンプリング周波数・チャンネルモードを述べる 4 バイトのヘッダを持っています。ファイル全体の長さもなければ索引も目次もありません。MP3 をテキストエディタでどこで切っても再生できるのはそのためです。現実に出回るファイルはほぼすべて、先頭にタイトル・アーティスト・カバーアートを収めた ID3v2 タグが付いていて、オフセット 0 で目にする読める ASCII はそのタグが供給しています。
ヘッダーの構造(バイト単位)
| オフセット | 長さ | フィールド | 意味 |
|---|---|---|---|
| 0 | 3 | ID3v2 identifier | 49 44 33、ASCII の ID3。これは音声の前にくっつけられたメタデータタグであって MP3 形式そのものの一部ではなく、まったく正しい MP3 にこれが無いこともあります。その場合、ファイルはいきなりフレームヘッダから始まります。 |
| 3 | 2 | ID3v2 version | メジャーバージョンとリビジョンの順で、ID3v2.3 なら 03 00、ID3v2.4 なら 04 00。実際に使われているのはこの 2 つです。リビジョンのバイトは常に 00 で、どちらのバイトも FF になってはいけません。 |
| 5 | 1 | ID3v2 flags | ビット 7 はタグがアンシンクロナイズされていること、ビット 6 は拡張ヘッダが続くこと、ビット 5 は実験的であること、そしてバージョン 2.4 だけのビット 4 はタグ末尾に 10 バイトのフッタがあることを示します。ほとんどのファイルではすべて 0 です。 |
| 6 | 4 | ID3v2 tag size | syncsafe 整数です。4 バイトそれぞれの最上位ビットを 0 に固定するので、使えるのは 1 バイトあたり 7 ビット、合計 28 ビットになります。この値に 10 バイトのヘッダは含みません。syncsafe の符号化を忘れた書き手は大きすぎるサイズを出力し、デコーダは音声の途中まで読み飛ばして冒頭のコンマ数秒を失います。 |
| 10 | variable | ID3v2 frames | タグの本体で、オフセット 6 のサイズが宣言した分だけのバイト数です。各フレームは 4 文字の識別子、サイズ、フラグからなります。タイトルは TIT2、アーティストは TPE1、アルバムは TALB、エンコーダは TSSE、カバーアートは APIC です。アルバムアートのせいで、この部分が後ろの音声 1 分ぶんよりはるかに大きくなることが日常的に起こります。 |
| 45 | 4 | First MPEG audio frame header | 音声が実際に始まる位置です。10 バイトの ID3 ヘッダに、オフセット 6 のサイズが述べた分を足した値になります。オフセット欄の 45 はタグが 35 バイトのときの値で、タグの長さが変われば当然ずれます。フレームヘッダが FF FB 40 C0 なら、同期ビットが 11 個立ち、MPEG バージョン 1、レイヤー III、CRC なし。続いてビットレートインデックス 4 とサンプリング周波数インデックス 0 で 44100 Hz の 56 kbps。最後にチャンネルモード 3、モノラルです。 |
| 66 | 4 | Xing or Info tag | 総フレーム数とシークテーブルを運ぶ疑似フレームで、最初の音声フレームの中の、ヘッダとサイド情報の後ろに置かれます。サイド情報は MPEG-1 モノラルで 17 バイト、MPEG-1 ステレオで 32 バイト、MPEG-2 では 9 バイトと 17 バイトなので、ここではフレームの先頭から 21 バイト目になります。可変ビットレートのファイルでは Xing、固定ビットレートでは Info と読めます。これが無いせいで、再生時間をとんでもなく間違って報告するプレイヤーがあります。 |
| -128 | 128 | ID3v1 tag | 元祖のメタデータ形式で、ファイルの最末尾に置かれた固定 128 バイトのブロック、先頭は ASCII の TAG、54 41 47 です。タイトル・アーティスト・アルバムに 30 バイトずつ、年に 4 バイト、コメントに 30 バイト、ジャンル番号に 1 バイト。互換性のために今も書かれていて、これを知らないデコーダはこれを短いノイズとして再生します。 |
似た形式との見分け方
| 紛らわしい形式 | 見分け方 |
|---|---|
| ADTS AAC | フレーム同期だけを見るものが必ずはまる罠です。生の .aac ファイルは FF F1 か FF F9 で始まり、MP3 のフレームと同じように 11 ビットの同期判定を通ってしまいます。分けるのは 2 バイト目のビット 2 と 1、つまりレイヤーの 2 ビットです。MP3 は Layer III なので 01、ADTS はここを 00 のままにしますが、これは MPEG-1 音声が予約していて決して使わない値です。同期だけでなくフレームヘッダ全体を見れば避けられます。 |
| MP2/MP1 | フレーム構造も FF Ex の同期も同一で、違うのは同じレイヤービットだけです。Layer II なら 10、Layer I なら 11。MP2 は放送で今も使われているのでファイルは実際に出てきますし、MPEG 音声の同期を見たら Layer III だと決めつけるプレイヤーは、拒否するのではなくノイズをデコードします。 |
| FLAC | FLAC は読める ASCII の fLaC で始まるので hex エディタで取り違えることはありませんが、同じアルバムを指す拡張子として実務では常に混同されています。片方向に本物のバイトレベルの危険もあります。雑なタグ付けソフトが FLAC ファイルの先頭に ID3v2 タグを書くことがあり、これは FLAC の仕様が許していないうえ、49 44 33 で判定を打ち切る検出器からは MP3 に見えてしまいます。 |
| WAV | RIFF の WAV ファイルは PCM ではなく MP3 データを収めることができ、fmt チャンクの format tag 0x0055 でそう宣言します。そういうファイルは 52 49 46 46 で始まり、構造上のあらゆる判定で WAV ですが、中のバイトは普通の MP3 フレームです。.mp3 にリネームしても RIFF ヘッダはそのまま残るので、多くのデコーダは冒頭の 40 数バイトでつまずきます。 |
よくある壊れ方
- タグと最初のフレームの間のゴミ。途中で止まったダウンロード、間違って書かれた ID3 サイズ、はぐれたアルバムアートのブロックなどが、フレームヘッダがあるべき場所にそうでないバイトを残します。デコーダは次の FF Ex パターンを前方に探して再同期するので、音声は再生されます。ただしクリックノイズを 1 つ挟んで、間違った開始位置から計算した再生時間を伴って。
- Xing ヘッダのない可変ビットレートファイル。あの疑似フレームにフレーム数が無いと、プレイヤーは最初に見たフレームのビットレートから長さを推定するしかなく、VBR ファイルではそれは単純に間違いです。症状は、3 分と表示されて 5 分再生され、シークするたびに違う場所へ飛ぶトラックです。
- 途中切れ。形式のどこにもファイル全体の長さが無いので、途中で切れた MP3 は最初から短いファイルと区別がつきません。切れたところまできれいに再生して、エラーも出さずに止まります。手がかりは Xing ヘッダのフレーム数(あればの話です)と、宣言した長さより手前で終わっている最後のフレームだけです。
- ID3v1 タグを音声としてデコードしてしまうケース。末尾の 128 バイトのブロックは TAG で始まりフレームではないので、ファイル末尾までフレームを歩いてこれを確認しないデコーダは短いノイズを出します。古いソフトでリッピングしたトラックの終わりで鳴る、あの古典的なクリックです。
- syncsafe でない ID3v2 のサイズフィールド。オフセット 6 に普通のビッグエンディアン整数を置く書き手があり、各バイトが 127 を超えられるぶん、実際のタグより大きい値として読めてしまいます。デコーダは行き過ぎて音声の内側に着地し、冒頭のコンマ数秒が失われます。音声自体はまったく無傷のまま残る、タグ付けソフトのバグです。
この形式の現在地
MP3 は技術的には時代遅れで、実務上は避けようがありません。同じビットレートなら AAC のほうが優れていて、ストリーミングサービスもスマートフォンの録音も実際にはそちらを使います。64 kbps を下回れば Opus が両方に勝ち、音声通話とリアルタイム音声はそれで動いています。それでも MP3 は追い出されませんでした。最後の特許が 2017 年に切れ、後継のどれも持っていないものを手に入れたからです。この 25 年に作られたあらゆる機器が、ライセンスも交渉もフォールバックもなしにこれを再生します。だからポッドキャスト、オーディオブック、ストリーミングではなくダウンロードするもの、そしてファームウェア更新を一生受けないカーステレオや安価なプレイヤーの既定になっています。編集や再エンコードを前提とするものには向きません。エンコーダを 1 回通すたびに失われるものが増えるからです。保管の正解は可逆形式を持っておき、MP3 は必要になったときにそこから生成することです。
MP3 ファイルをこのサイトで開く
どれもブラウザ内で動きます。ファイルが端末から出ることはありません。
関連する形式
MP3 と混同しやすい形式です。先頭バイトを見比べてください。