クラッシュが、再生できないファイルを残した理由
MP4 は1つのファイルの中の2つのものです。映像、すなわち 圧縮された動画と音声の長いブロックと、インデックス、すなわち すべてのフレームがどこにあり、音声がどう揃うかをプレーヤーに伝える小さな 表です。OBS は録画中、映像を絶え間なくディスクへ流し込みます。まだ インデックスは書けません。インデックスは、録画が終わるまで判明しない 最終的なサイズとオフセットを記録するからです。だから OBS はインデックスを 最後に、あなたが停止をクリックした瞬間に書き込みます。
クラッシュはその瞬間に決して至りません。プロセスは、映像がすでに ディスク上にあり、インデックスがついに書かれないまま死にます。MP4 の言葉で いえば、ファイルには ftyp ヘッダーとメディアのmdat ブロックがあり、それらをインデックス化するmoov アトムが欠けています。だからこそあらゆるプレーヤーが 拒み、ffmpeg は moov atom not found と告げるのです。何時間もの 映像が、どんな普通のプレーヤーから見ても完全に空っぽに見えるファイルの中に 収まっていることがあります。そのインデックスの完全な解剖と、それがなぜ 末尾に置かれるのかについては、MP4 の moov アトム解説 を、そして厳密なエラーとその原因については「moov atom not found」 をご覧ください。
OBS のクラッシュを図に:録画はディスクに届いたのに、OBS が停止時に書き込むインデックスがついに書かれなかった。
本当に「もうダメ」なのか?——イエスでもあり、ノーでもある
この問題を検索すると、フォーラムのスレッドが次から次へと見つかり、その多くで OBS の貢献者が、ファイナライズされていない MP4 は本質的にもうダメだと 言っています。彼らは間違ってはいませんし、その意味するところを正確に 理解しておく価値があります。それは肩をすくめる諦めではなく、精密な言明 だからです。
彼らが意味しているのは、ファイルをリマックスできない、 ということです。リマックスはストリームをきれいなコンテナへコピーするもので、 不調な MP4 を救い出す通常のやり方です。しかしリマックスは、ストリームが どこにあるかを知るために既存のインデックスを読まねばならず、ファイナライズ されていないファイルには読むべきインデックスがありません。だからリマックスは その場で失敗し、リマックスの上に築かれたあらゆる ffmpeg の-c copy や faststart の小技も一緒に失敗します。その「直す」の 定義に照らせば、ファイルは本当にもうダメなのです。
彼らが言い落としている半分は、リマックスが唯一の選択肢ではないということ です。インデックスの再構築は別の操作です。存在しない インデックスを読む代わりに、映像を直接走査してフレームの境界を探し、測定 した内容からインデックスを組み直します。これは untrunc のようなコマンド ライン ツールが行う類の修復で、フォーラムが見放した録画を復旧するものです。 映像は初めから問題ではなく、欠けたインデックスが問題でした。そして インデックスは組み直せます。
リファレンス録画によるアプローチ
インデックスの再構築とは、ファイルの構造を映像そのものから復元することで、 その最も確実なやり方がリファレンス録画を使うことです。 これは、同じ設定、同じエンコーダー、解像度、フレームレート、コンテナで OBS で作った、正常に停止された健全なクリップです。その健全なファイルは、 あなたの壊れた録画が使ったのとまさに同じ形式について、完全で有効な インデックスを持っています。それが、生き残った映像に合致するテンプレートを 再構築に与えてくれます。
これを用意するのは1分もかかりません。録画していたのと同じプロファイルで OBS を開き、数秒だけキャプチャし、正常に停止してファイルをファイナライズ します。再構築はそのリファレンスを読んであなたのデータを解釈し、そして 生き残った映像の上に、再生可能なファイルを書き出します。
さて、正直な限界を、率直に述べます。クラッシュ直前の最後の数秒はまだ メモリ内にあり、ディスクへ到達しなかったので失われています。再構築は その時点までのすべてを返します。強く可変なビットレートで作られた録画は、 わずかな音声と映像のずれを伴って戻ってくることがあります。リファレンスは 本当に一致していなければなりません。異なる設定で作られたクリップは、 揃わないテンプレートを与えるからです。そしてファイルが 0 バイトを示すか、 期待されるサイズのごく一部しかない場合は、そこに再構築すべき映像がなく、 それは修復の問題ではなくストレージや復元の問題です。再構築が返すのは、 インデックス化され再生可能になった、あなたの本物の録画であって、決して でっち上げのフレームではありません。
次回はこう防ぐ:OBS が本来どう録画すべきか
この障害モードは丸ごと回避可能で、OBS プロジェクトはそれを回避する道具を 作ってきました。役立つ度合いの高い順に、3つの設定を挙げます。
MKV で録画し、それから MP4 へリマックスする
長年の定番で、いまも最も安全です。OBS を MKV で録画するよう設定します。 MKV は、OBS が予期せず止まっても録画が使えるように書き込まれます。末尾に 一度だけ書かれる単一のインデックスにかかっていないからです。セッションが きれいに終わったら、OBS 内蔵のリマックスを使って、MKV を数秒で、無劣化・ 再エンコードなしで MP4 へ変換します。各録画のあとに OBS が自動で MP4 へ リマックスするよう設定することさえできます。
OBS 30.2 以降で Hybrid MP4 を使う
MKV を嫌う編集ソフトのためなどで MP4 が直接必要なら、OBS 30.2 で追加された Hybrid MP4 をオンにしてください。これは MP4 を、フラグメント化された クラッシュ耐性のある構造で書き込むので、中断された録画は、インデックス なしで取り残されるのではなく、ほぼそのまま使える状態を保ちます。MP4 が MKV の安全性に最も近づく設定です。
フラグメント化 MP4 という仕掛けを理解する
Hybrid MP4 が機能するのは、フラグメント化 MP4 のおかげです。これは末尾に 1つのインデックスを置くのではなく、ファイル全体にわたって小さな自己完結型の インデックスの断片を書き込む構造です。カスタム出力を手作業で設定するなら、 マルチプレクサーの設定は movflags=frag_keyframe+empty_moov で、 同じクラッシュ耐性の挙動を生み出します。それが、あの親切なトグルの下に ある仕組みです。
よくある質問
クラッシュしたあとの OBS 録画は復旧できますか?
多くの場合はできます。OBS が MP4 または MOV を書き込んでいて、ファイルサイズがまともに残っていればです。OBS は録画中、映像を絶え間なくディスクへ書き込みますが、それらを束ねるインデックスは停止を押したときにだけ書き込みます。クラッシュはそのステップを飛ばすので、映像はディスク上にあるのにインデックスがなく、再生できません。インデックスを再構築すれば録画は再び再生できるようになります——ただし OBS が落ちた瞬間にまだメモリ内にあった最後の数秒は失われます。0 バイトのファイルはまったく別の問題で、そこには再構築すべき映像がありません。
OBS がクラッシュしたあと、なぜ MP4 が再生できないのですか?
MP4 が最後まで完了(ファイナライズ)されなかったからです。プレーヤーが必要とするインデックス、すなわち moov アトムは、録画を停止した瞬間、最終的なサイズが判明してから書き込まれます。クラッシュはその書き込みが起きる前にプロセスへの電源を断つので、ファイルには映像がすべて残っているのに、それを指し示すインデックスがまったくありません。プレーヤーや ffmpeg はこれを moov atom not found と報告します。映像は生き残った——地図が生き残らなかったのです。
OBS では MKV と MP4 のどちらで録画すべきですか?
クラッシュ耐性が大切なら MKV で録画してください。長時間のセッションでは、それが大切です。MKV は、OBS が予期せず止まっても録画が使えるように書き込まれます。末尾に一度だけ書かれる単一のインデックスに依存しないからです。終わったら、OBS 内から MKV を数秒で無劣化のまま MP4 へリマックスできます。再エンコードは不要です。どうしても MP4 に直接録画しなければならないなら、OBS 30.2 以降の Hybrid MP4 オプションを使ってください。これはクラッシュに強い構造を保ちます。
壊れた OBS の MP4 をリマックスすれば直せますか?
いいえ。そして、これこそがほとんどの「もうダメだ」というアドバイスの背後にある誤解です。リマックスはストリームを新しいコンテナへコピーしますが、そのためにはまず既存のインデックスを読まねばならず、ファイナライズされていない MP4 には読むべきインデックスがありません。こうしたファイルではリマックスは即座に失敗します。それはリマックスの本当の限界であって、映像が失われた証拠ではありません。インデックスの再構築という別の操作こそが、ファイナライズされていない録画を実際に復旧するものです。
OBS の Hybrid MP4 とは何ですか?
Hybrid MP4 は OBS 30.2 で追加された録画オプションで、MP4 をフラグメント化されたクラッシュ耐性のある方法で書き込みます。そのため、クラッシュで中断された録画は、インデックスなしで取り残されるのではなく、ほぼそのまま使える状態を保ちます。ほとんどの編集ソフトがそのまま受け入れる MP4 の手軽さと、OBS 録画では MKV が定番のアドバイスであった所以の安全性の多くとを、両立させてくれます。
この問題の中心にある欠けたインデックスの全容は、こちら:MP4 の解剖と moov アトム。