壊れたAndroidの動画を修復する

開けないAndroidのクリップは、たいていファイナライズされなかった.mp4です。録画アプリが強制終了された、端末のメモリが尽きた、あるいはファイルを閉じる前にストレージが一杯になった、といったケースです。フレーム自体はまだ端末に残っており、欠けているのはファイルを閉じるインデックスだけ。その再構築に、何かをアップロードする必要はありません。

ファイルがデバイスから出ることはありません — 修復はブラウザ内で実行されます。アップロードは 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. 結果をダウンロード

Androidスマートフォン(Pixel、Samsung、Xiaomi、OnePlus など)は、プラットフォームの MediaRecorderMediaMuxer APIを通じて動画を録画し、ISO base-media コンテナに標準的な .mp4 を書き出します。撮影中、映像と音声は mdat ボックスへと流し込まれますが、すべてのフレームを対応づけるインデックスである moov アトムは、最後にアプリが MediaMuxer.stop() を呼び出したときにのみ書き込まれます。アプリがその呼び出しにたどり着けなかった場合、有効なHEVCまたはH.264のデータが詰まっているのにインデックスのないファイルが残り、どのプレーヤーもそれを拒否します。上のエリアにファイルをドロップすれば、ツールはまさにこの点をブラウザ内でチェックし、素材が復元可能であればコンテナを再構築します。

Androidが.mp4をファイナライズしないまま残す理由

Androidのメディアスタックは、録画がいつ再生可能になるかを明確に定めています。キャプチャ中、MediaRecorder(あるいは MediaCodecMediaMuxer を直接使うカメラアプリ)は、エンコード済みのサンプルを mdat に追記していきます。moov アトム(サンプルサイズ、チャンク(chunk)のオフセット、タイミングテーブル、そしてコーデックのパラメータセット)はメモリ上で組み立てられ、stop()release() が実行されたときにのみファイル末尾へと書き出されます。この手順が飛ばされると、ディスク上のバイト列は頭のないMP4になります。本物のフレームはあるのに、地図がないのです。

原因となる中断は三つあります。カメラアプリがクラッシュした、またはシステムに強制終了された。 バグ、あるいはメモリ不足のもとでバックグラウンド/フォアグラウンドのアプリを回収するAndroidのlow-memory killer(低メモリキラー)が、stop() の前にプロセスを終わらせてしまうと、インデックスを書き込むものが何もありません。録画中にストレージが一杯になった。 4KのHEVCは書き込みが速く、内部ストレージやSDカードの空き容量がゼロバイトに達すると、muxerの書き込みが途中で失敗し、ファイルは moov のないまま切り詰められます。端末の電源が切れた。 キャプチャ中のバッテリー切れや強制再起動も、同じようにファイナライズを飛ばしてしまいます。

中身のコーデックは、HEVC/H.265(効率の高さから選ばれ、最近のAndroidの多くで高解像度モードの既定になっています)か、H.264/AVC(互換性のための代替)のどちらかです。コンテナの挙動はどちらも同一で、だからこそ修復の手順はコーデックに関係なく同じになります。

再構築できるもの、できないもの

フレームのデータは mdat に残っているため、修復とは MediaMuxer.stop() が書き残さなかったインデックスを再構築することです。ツールは生き残ったストリームを走査し、各フレームの境界とタイミングを復元し、サンプルテーブルを作り直して、プレーヤーが先頭からデコードできるようにします。つまり、頭のないファイルを、シークできる通常のMP4へと戻すのです。ディスクが一杯になってファイルが切り詰められている場合でも、切断の前に完全に書き込まれたフレームをサルベージし、その周りに再生可能なコンテナを閉じます。そのため、あるテイクの80%を捉えたクリップは、全体が失敗するのではなく、その80%を返してくれます。これらすべては、ファイルがストレージから読み込まれるのに合わせて、あなたのブラウザ内で実行されます。

正直に言えば、限界は、中断の後に書き込まれるはずだったフレームが存在しないという点です。ディスクが一杯になれば書き込みは止まり、クラッシュすればエンコーダは止まり、そして一度も保存されなかったバイトを、どんなツールも作り出すことはできません。手元に切り詰められたコピーしか残っていないなら、サルベージが正しい選択です。ただし、元のファイルがまだ端末に残っていて、単純にきれいにコピーし直せるなら、まずそちらを試してください。良いコピーは、どんな修復にも勝るからです。

同じ端末・同じアプリのクリップが役立つ理由

インデックスの再構築が最も確実になるのは、壊れたファイルが省いてしまった正確なコーデック設定をツールが把握しているときです。同じ端末で、同じアプリが同じモードで録画した正常なクリップは、まさにそれを提供してくれます。HEVCのパラメータセット(VPS/SPS/PPS)またはH.264のSPS/PPS、加えて解像度とフレームレートです。おかげで再構築は、近似ではなく元のとおりに再現できます。

実際には、同じカメラアプリと同じ画質設定で使い捨ての数秒を録画し、手元に用意しておいてください。コーデックを合わせておけば(HEVCのクリップにはHEVCのリファレンス、H.264にはH.264を)、修復が必要とするときにだけそれを求められます。別の端末や別のアプリのサンプルは、パラメータセットが異なるため、たいてい合致しません。

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

修復できる

  • カメラアプリや動画アプリが、MediaMuxer.stop() の前にクラッシュまたは強制終了されたためにファイナライズできなかった録画(moovが欠落)
  • 録画中に内部ストレージやSDカードが一杯になって途中で途切れたクリップ
  • キャプチャ中のバッテリー切れや強制再起動によって中断された録画
  • 本物のフレームを含んでいるのに、Google フォト、ギャラリー、VLC、編集ソフトで開けないHEVCおよびH.264の.mp4ファイル

修復できない

  • 中断より後の映像。それらのフレームはストレージに一度も書き込まれていません
  • コピーの失敗や故障しかけたSDカードのあとで、0バイトまたはほぼゼロとして読み込まれるファイル
  • DRMで保護された、または暗号化されたコンテンツ
  • 同じ端末・同じアプリの一致するHEVCリファレンスがない、壊れたHEVCクリップ

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

よくある質問

カメラアプリがクラッシュして動画が再生できません。何が起きたのですか?

アプリが MediaMuxer.stop() を呼び出す前に強制終了されたのです。この呼び出しこそが、MP4の moov インデックスを書き込むものです。キャプチャされたフレームは端末に残っていますが、インデックスがないためプレーヤーには壊れたファイルに見えます。コンテナを再構築すればそれらのフレームが再びインデックス化され、クリップが再生できるようになります。

録画中にストレージが一杯になり、クリップが死んでしまいました。復元できますか?

多くの場合、部分的には可能です。ディスクが一杯になるとファイルは書き込みの途中で切り詰められ、切断点までの有効なフレームがインデックスなしで残ります。ツールは完全に書き込まれたフレームをサルベージし、その周りに再生可能なコンテナを再構築します。つまり、ストレージが尽きる前に捉えたものはすべて手に入ります。

使っているAndroidスマートフォンのメーカーは関係ありますか?

いいえ。Pixel、Samsung、Xiaomi、OnePlus、Motorola などはいずれも、同じAndroidのメディアスタックを通じて標準的なISO base-mediaの.mp4ファイルを録画するため、同じインデックス欠落の修復が適用できます。リファレンスのクリップを選ぶときに、コーデックがHEVCかH.264かを知っておくと役立つ、というだけです。

動画は修復のためにアップロードされますか?

いいえ。ファイルはあなたの端末から読み込まれ、ブラウザのタブ内で再構築されます。何も送信されません。ブラウザのネットワーク(Network)タブを開けば、動画が1バイトもあなたのマシンから出ていかないことを確認できます。

関連: MP4を修復(あらゆるソース) · "moov atom not found" · Samsung Galaxyの動画を修復 · アップロードされないことを確認