MP3 が再生できない

再生プレーヤーが MP3 を「サポートされていない(unsupported)」と表示したり、ノイズしか鳴らなかったりしても、録音そのものはたいてい残っています。壊れているのは、デコーダーがファイルをたどるために追うフレーム同期マーカーのつながりです。破損したタグ、先頭にこびりついたゴミデータ、あるいはビットが反転した数個のフレームが原因です。このつながりを組み直すのに、あなたの音声をアップロードする必要はありません。

ファイルがデバイスから出ることはありません — 修復はブラウザ内で実行されます。アップロードは 0 バイトです。

Your data is the big block — usually intact. What breaks is the small index. Repair rebuilds it.

Drop a file here or browseTap to choose a file

ZIP · Office · PDF · video · JPG · PNG · RAR/7z · SQLite — repaired right here in your browser. Nothing is uploaded

0 bytes uploadedFree: 3 repairs/day — up to 500 MB video, 100 MB docs & archives, 50 MB photos. Free download. Single repair €5.90. No account required.

今すぐ修復

  1. ファイルをドロップ
  2. 修復はローカルで実行
  3. 結果をダウンロード

無音で終わってしまう MP3 は、そのほとんどがデータを消されたのではなく、構造が壊れています。音声は、それぞれが独立したMPEG オーディオフレームの連なりの中にあり、各フレームは 11 ビットのフレーム同期によって始まりを示されます。これは、バイト 0xFF に続いて、上位 3 ビットがすべて立っているバイト(マスク 0xE0)が並ぶパターンです。プレーヤーは最初の同期に食いつき、4 バイトのヘッダーを読み、自分で計算したフレーム長のぶんだけジャンプし、これを繰り返します。この連なりが断ち切られると — 長さの値が間違った壊れた ID3 タグ、先頭にくっついたゴミデータ、不良セクターによってビットが反転した数個のフレームなどによって — デコーダーは糸を見失い、ファイルをサポート外または破損として報告します。上のエリアにファイルをドロップすると、ツールはブラウザー内でこの連なりを組み直します。先頭の ID3 タグとあらゆるゴミデータを取り除き、最初の本物のフレームに再同期し、検証できないフレームを飛ばし、生き残ったフレームを、きれいで再生可能な MP3 として書き戻します。その間、データが端末から出ていくことは一切ありません。

音声がほぼ無傷なのに MP3 が再生を拒むのはなぜか

MP3 は 1 つのかたまりではありません。小さなMPEG オーディオフレームが連なったもので、各フレームはおよそ 26 ミリ秒ぶんの音を持ちます。すべてのフレームは 4 バイトのヘッダーで始まります。バイト 0 は 0xFF で、バイト 1 の上位 3 ビットが 11 ビットのフレーム同期(0xFFE…)を完成させます。ヘッダーの残りには、MPEG のバージョン(MPEG-1、MPEG-2、または MPEG-2.5)、レイヤー(ほぼ必ず Layer III)、ビットレートインデックスサンプルレートインデックス、そしてパディングビットが詰め込まれています。デコーダーはビットレートとサンプルレートからフレームのバイト長を計算し — Layer III では floor(144 × bitrate ÷ sample_rate) + padding です — それを使って次の同期へ直接跳びます。仕様上、いくつかのビットの組み合わせは不正です。予約済みのバージョン、予約済みのレイヤー、0(フリー)または 15(不正)のビットレートインデックス、3 のサンプルレートインデックスなどです。デコーダーがたどり着いたヘッダーがこれらのいずれかにデコードされる場合、そこは本物のフレーム境界ではなく、ストリームは行き詰まります。

この跳躍を狂わせる原因は、主に 2 つあります。1 つ目は、ファイルのいちばん先頭にある壊れたID3v2 タグです。ID3v2 タグは、ASCII のバイト列 ID3(0x49 0x44 0x33)、10 バイトのヘッダー、そして 4 バイトに分散された syncsafe な 28 ビットのサイズ値(各バイトは下位 7 ビットだけを持ち寄る)で始まります。このサイズが間違っていると — 大きすぎる、あるいは途中で切れた埋め込みアルバムアートがタグを壊してしまった場合によく起こります — プレーヤーは本物の音声の開始位置を通り越してシークするか、タグを音として解釈しようとしてしまいます。2 つ目は先頭のゴミデータです。ダウンロードの途中終了、誤って .mp3 という名前で保存された HTTP エラーページ、あるいは最初の同期より前にバイトを付け足してしまうバイト順の不具合などです。ID3 タグがまったくないファイルは、単なる「むき出しの MPEG オーディオフレーム同期」でしかなく — これはそもそも一部のプレーヤーが MP3 として認識してくれない弱い手がかりです。

症状がこれほど多様なのはそのためです。ffmpeg は Failed to find two consecutive MPEG audio frames(意味は「連続する 2 つの MPEG オーディオフレームを見つけられませんでした」)や Header missing(「ヘッダーがありません」)を報告します。mpg123 は Illegal Audio-MPEG-Header 0x00000000(「不正な MPEG オーディオヘッダー」)を表示し、フレームのパラメーターがファイルの途中で変化すると Frankenstein stream(つぎはぎだらけのストリーム)について警告します。ブラウザーの <audio> 要素は DEMUXER_ERROR_COULD_NOT_OPEN を投げます。これらはすべて同じことを述べています。フレームのつながりが壊れているのであって、音楽そのものが消えたわけではない、ということです。

ブラウザー内のフレーム再同期が再生可能なファイルをどう組み直すか

この修復は構造的な再同期であり、あなたのタブの中で純粋な TypeScript として動きます。まず、先頭に ID3v2 タグがあれば、その syncsafe なサイズ値(フッターフラグが立っている場合は 10 バイトのフッターも加える)からその大きさを測り、その先へ進みます。次に、本物のヘッダーとして解釈できるバイトパターンを探して前方へスキャンします — 0xFF0xE0 の同期ビット、予約済みでないバージョンとレイヤー、そしてどちらも範囲内に収まるビットレートインデックスとサンプルレートインデックスです。ここで重要なのは、単独の 0xFF 0xEx は音声データの中にたまたま現れることがある、という点です。そのため、計算したフレーム長のぶんだけ進んだ読み取り位置がちょうど別の有効な同期(あるいはファイルの末尾)に着地したときにのみ、候補を採用します。この 2 フレーム確認こそが、出力にノイズを書き込む代わりに、誤検出をはねのける仕組みです。

そこからはフレームを 1 つずつたどり、確認できた各フレームをそのまま出力へコピーしていきます。最初の正常なフレームより前のバイトは先頭のゴミデータとして数えられ、破棄されます。途中で解釈に失敗した区間は破損したフレーム領域として扱われ、読み取り位置が次のきれいな同期でつながりを拾い直せるように読み飛ばされます。保持される各フレームはバイト単位でそのままコピーされるため、再エンコードは行われず、品質の劣化もありません — 生き残った音声は、あなたが録音したものそのままです。ツールは自分が行ったことを報告します。見つかったフレーム数と保持したフレーム数、先頭のゴミデータを何バイト取り除いたか、そして損傷の分類として clean(問題なく成功)または resynced(ゴミデータや破損フレームを破棄した部分的な成功)を示します。

知っておく価値のある細かい点が 2 つあります。多くの MP3 は、最初のフレームの中に Xing/Info(または VBRI)ヘッダーを持っています。これは可変ビットレートのファイル向けに、総フレーム数とシークテーブルを格納しています。このヘッダー自体が有効な MPEG フレームであるため、それが生き残っていれば再同期はそれを保持します — そして生き残っていなければ、プレーヤーはビットレートから長さを推定する方式にフォールバックします(ffmpeg は文字どおり Estimating duration from bitrate, this may be inaccurate(「ビットレートから再生時間を推定します。正確でない可能性があります」)と警告します)。末尾の ID3v1 タグ — ファイルの最後にある、TAG で始まる固定 128 バイト — はフレームではないため、デコーダーを混乱させる代わりに、単に末尾から切り落とされます。これらのどの処理もネットワークには触れません。「ネットワーク(Network)」タブを開けば、ファイルが 0 バイトも送信されていないことを確認できます。

本当に直せないのはどんなときか

再同期が役に立つのは、ファイルのどこかに本物の MPEG フレームが生き残っている場合だけです。スキャンでデコード可能なフレームが 1 つも見つからなければ、ツールは、動くふりをする空のファイルを渡す代わりに、処理を止めて正直にそう伝えます(no-frames という結果です)。そうなる場合、たいていはそのバイト列がそもそも MPEG オーディオではありません。.mp3 にリネームされた AAC/.m4aWMA、あるいは Opus ファイル、または音声の拡張子が付いた保存済みの Web ページやダウンロードの断片などです。食いつくべき 0xFFE のフレームヘッダーが存在せず、どんな再同期もそれを作り出すことはできません。

また、故障しかけたドライブや不良のカードによって物理的に上書きされた、あるいはゼロとして読み出される音声を復元することもできません — それらのフレームはディスク上に存在しないので、まずストレージのレベルで生のバイトを復元し、それからファイルを修復してください。DRM で保護されたトラック(Apple の古い .m4p や保護された AAC)は MP3 ではなく、デコードには鍵が必要です。このツールはそこには手を付けません。そして、破損した領域を破棄せざるを得なかった箇所では、そこに短い無音やプチッというノイズが残ることがあります — 修復は正常なフレームを無劣化でコピーしますが、失われたミリ秒ぶんを合成して作り出すことはしません。確実に取り戻せるのは、無傷だったすべてのフレームが、順序どおりに、プレーヤーが実際に開けるコンテナーに収まった状態です。

修復できるものとできないもの

修復できる

  • 壊れた、あるいは大きすぎる ID3v2 タグ(syncsafe サイズの誤り、埋め込みアルバムアートの破損)によって、プレーヤーが音声を通り越して、または音声の中へシークしてしまう MP3
  • 最初のフレームより前にある先頭のゴミデータ — ダウンロードの途中終了、.mp3 として保存された HTTP エラーページ、あるいは先頭に付いた不具合データ — を破棄し、再生が最初の本物のフレームから始まるようにする
  • ファイル途中でのフレーム同期の喪失: ツールが次の有効な 0xFF 0xEx ヘッダーで再同期して処理を続ける
  • 不良セクターによる個々の破損フレームを読み飛ばし、生き残ったフレームが引き続き再生できるようにする
  • ID3 タグがなく、プレーヤーが MP3 として認識しないむき出しの MPEG ストリーム
  • 最後のオーディオフレームより後ろにある末尾のゴミデータや、はぐれた 128 バイトの ID3v1 タグ

修復できない

  • デコード可能な MPEG フレームが 1 つもないファイル — 再同期する対象がありません(「no-frames」という結果として報告されます)
  • .mp3 という名前をまとった MP3 以外のファイル(AAC/.m4a、WMA、Opus、あるいは保存済みの Web ページ)— 見つけるべき 0xFFE のフレームヘッダーがありません
  • 故障しかけたドライブによって上書きされた、またはゼロとして読み出される音声 — まず生のバイトを復元してから修復してください
  • 鍵のない DRM 保護トラック(.m4p / 保護された AAC)— これらは MP3 ではなく、デコードできません
  • 破棄せざるを得なかったフレームの中にあった、まさにその音声 — 領域を取り除いた箇所には短い無音やプチッというノイズが残ることがあります(再エンコードでそれを作り直すことはできません)

修復が失敗した場合、その理由(データの欠落か構造の破損か)をお伝えします。失敗した修復に料金が請求されることはありません。

よくある質問

MP3 がノイズになるか「サポートされていない形式(unsupported format)」と表示されます — 音楽は消えてしまったのですか?

たいていは消えていません。こうした症状はほぼ必ず、音声が消去されたのではなくフレームのつながりが壊れていることを意味します — 壊れた ID3 タグ、最初のフレームより前のゴミデータ、あるいは数個の破損フレームなどです。ツールが本物の MPEG フレームに再同期してゴミデータを取り除けば、生き残った音声はまた再生できるようになります。

「Failed to find two consecutive MPEG audio frames」とはどういう意味ですか?

これは ffmpeg が「フレーム同期のように見えるものは見つけたが、その直後に 2 つ目の有効なフレームを確認できなかったので、このファイルは信用しない」と言っているものです(意味は「連続する 2 つの MPEG オーディオフレームを見つけられませんでした」)。先頭のゴミデータや壊れたタグの典型的な痕跡です。この修復も同じ 2 フレーム確認を使い、本物のつながりが実際にどこから始まるのかを突き止めます。

修復すると音声が再圧縮されて品質が落ちますか?

いいえ。この修復は無劣化の構造的コピーです。確認できた各フレームはバイト単位でそのまま書き出され、デコードして再エンコードする工程はありません。失われるのは、破損がひどくて保持できなかったフレームの中の音声だけで、その箇所に短い無音が残ることがあります。

修復後、再生時間やシークバーがおかしくなります — なぜですか?

最初のフレームにある Xing/Info(または VBRI)ヘッダーは、可変ビットレートのファイル向けに総フレーム数とシークテーブルを格納しています。このヘッダーが失われると、プレーヤーは代わりにビットレートから長さを推定します — ffmpeg も Estimating duration from bitrate, this may be inaccurate(「ビットレートから再生時間を推定します。正確でない可能性があります」)と警告します。音声は最初から最後まで問題なく再生されます。ずれる可能性があるのは、表示される再生時間だけです。

修復のためにファイルはアップロードされますか?

いいえ。MP3 はお使いのディスクから読み込まれ、ブラウザーのタブ内で組み直されます。何も送信されません。「ネットワーク(Network)」タブを開けば、ファイルがお使いのマシンから 0 バイトも出ていかないことを確認できます。

関連: "Invalid data found when processing input" · "サポートされていない形式" (0xc00d5212) · 動画を修復する(あらゆる形式) · ゼロアップロードを検証する