ByteScope

MP3 ファイル形式

MPEG-1/2 Audio Layer III。もっとも普及した非可逆音声形式。

MIME タイプ
audio/mpeg
拡張子
.mp3
カテゴリ
音声

マジックナンバー(ファイル署名)

0x00000000494433ID3'ID3' metadata tag

タグのない MP3 は代わりに MPEG フレーム同期で始まります。FF に続いて上位 3 ビットが立ったバイトです。

MP3 形式について

MP3 は携帯型デジタル音楽を一般に広めた形式で、聴覚の知覚モデルを使ってほとんどの人が聞き取れない情報を捨て、音声を生のおよそ 10 分の 1 まで縮めます。実のところコンテナと呼べるものではありません。MP3 ファイルは独立したフレームがただ並んだもので、1 フレームはおよそ 26 ミリ秒、それぞれが自分のビットレート・サンプリング周波数・チャンネルモードを述べる 4 バイトのヘッダを持っています。ファイル全体の長さもなければ索引も目次もありません。MP3 をテキストエディタでどこで切っても再生できるのはそのためです。現実に出回るファイルはほぼすべて、先頭にタイトル・アーティスト・カバーアートを収めた ID3v2 タグが付いていて、オフセット 0 で目にする読める ASCII はそのタグが供給しています。

ヘッダーの構造(バイト単位)

オフセット長さフィールド意味
03ID3v2 identifier49 44 33、ASCII の ID3。これは音声の前にくっつけられたメタデータタグであって MP3 形式そのものの一部ではなく、まったく正しい MP3 にこれが無いこともあります。その場合、ファイルはいきなりフレームヘッダから始まります。
32ID3v2 versionメジャーバージョンとリビジョンの順で、ID3v2.3 なら 03 00、ID3v2.4 なら 04 00。実際に使われているのはこの 2 つです。リビジョンのバイトは常に 00 で、どちらのバイトも FF になってはいけません。
51ID3v2 flagsビット 7 はタグがアンシンクロナイズされていること、ビット 6 は拡張ヘッダが続くこと、ビット 5 は実験的であること、そしてバージョン 2.4 だけのビット 4 はタグ末尾に 10 バイトのフッタがあることを示します。ほとんどのファイルではすべて 0 です。
64ID3v2 tag sizesyncsafe 整数です。4 バイトそれぞれの最上位ビットを 0 に固定するので、使えるのは 1 バイトあたり 7 ビット、合計 28 ビットになります。この値に 10 バイトのヘッダは含みません。syncsafe の符号化を忘れた書き手は大きすぎるサイズを出力し、デコーダは音声の途中まで読み飛ばして冒頭のコンマ数秒を失います。
10variableID3v2 framesタグの本体で、オフセット 6 のサイズが宣言した分だけのバイト数です。各フレームは 4 文字の識別子、サイズ、フラグからなります。タイトルは TIT2、アーティストは TPE1、アルバムは TALB、エンコーダは TSSE、カバーアートは APIC です。アルバムアートのせいで、この部分が後ろの音声 1 分ぶんよりはるかに大きくなることが日常的に起こります。
454First 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、モノラルです。
664Xing or Info tag総フレーム数とシークテーブルを運ぶ疑似フレームで、最初の音声フレームの中の、ヘッダとサイド情報の後ろに置かれます。サイド情報は MPEG-1 モノラルで 17 バイト、MPEG-1 ステレオで 32 バイト、MPEG-2 では 9 バイトと 17 バイトなので、ここではフレームの先頭から 21 バイト目になります。可変ビットレートのファイルでは Xing、固定ビットレートでは Info と読めます。これが無いせいで、再生時間をとんでもなく間違って報告するプレイヤーがあります。
-128128ID3v1 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 だと決めつけるプレイヤーは、拒否するのではなくノイズをデコードします。
FLACFLAC は読める ASCII の fLaC で始まるので hex エディタで取り違えることはありませんが、同じアルバムを指す拡張子として実務では常に混同されています。片方向に本物のバイトレベルの危険もあります。雑なタグ付けソフトが FLAC ファイルの先頭に ID3v2 タグを書くことがあり、これは FLAC の仕様が許していないうえ、49 44 33 で判定を打ち切る検出器からは MP3 に見えてしまいます。
WAVRIFF の 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 と混同しやすい形式です。先頭バイトを見比べてください。

形式先頭バイト拡張子
FLAC66 4C 61 43.flac
M4A66 74 79 70.m4a
Ogg4F 67 67 53.ogg
WAV52 49 46 46.wav

よくある質問

ファイルのマジックナンバーとは何ですか?

ファイル先頭の数バイトで、名前が何であろうとその形式を示すものです。PNG は必ず 89 50 4E 47 で始まり、ZIP は 50 4B 03 04 で始まります。OS もブラウザも file コマンドも、拡張子を信用せずこのバイト列を読みます。だからファイル名を変えても中身の正体は変わりません。

マジックナンバーを自分で確認する方法は?

macOS や Linux なら xxd -l 16 ファイル名 で先頭 16 バイトが表示されます。Windows なら PowerShell で Format-Hex -Path ファイル名 -Count 16 です。あるいはこのサイトのファイル形式判別ツールにドロップすれば、ローカルでバイト列を読んで形式を教えてくれます。アップロードはありません。

2 つの形式が同じマジックナンバーを持つのはなぜ?

一方が他方の上に作られているからです。docx、xlsx、pptx、apk、jar、epub はすべて中身が ZIP アーカイブなので ZIP の署名で始まり、区別するには内部のエントリを見る必要があります。Java の class ファイルと macOS のユニバーサルバイナリはどちらも CA FE BA BE で始まり、直後のフィールドで見分けます。

マジックナンバーがまったくないファイルもある?

あります。XML、HTML、JSON、SVG、CSV といったテキストベースの形式には固定のバイト署名がないため、構造から判別します。先頭の <?xml 宣言、<svg 要素、あるいは { に続く引用符付きのキーなどです。これは確定ではなく推測なので、このリファレンスではそうした形式をプローブ判別として示しています。

マジックナンバーが一致すればそのファイルは安全?

いいえ。わかるのは形式であって、中身が無害かどうかではありません。正規の PDF や docx でも悪意のあるペイロードを含んでいることがあります。特に拡張子とバイト列が食い違うときに真の形式を知るのは有用な第一段階ですが、マルウェアスキャンではありません。

MP3 かもしれないファイルをお持ちですか?ファイル形式判別ツールで調べる — マジックナンバーをローカルで読み取ります。アップロードは一切ありません。またはすべての形式を見る。