電源喪失がファイルに実際に何をするのか
アクションカメラやドローンは、映像を MP4 または MOV コンテナに記録します。 そしてこのコンテナには、融通の利かない特有の癖があります。録画している 間、カメラは圧縮した映像と音声を、少しずつ大きくなる1つのブロックとして カードに書き流し続けます。この時点ではまだインデックス——各フレームがどこから始まり、どれだけ続き、音声がどう揃うかをプレーヤーに 伝える表——は書き込みません。最終的なサイズが分かるのは録画が終わった ときなので、カメラはそのときにしかインデックスを書けないのです。だから インデックスは最後、あなたが停止ボタンを押した瞬間に書き込まれます。
その瞬間より前に電源が切れると、正しい先頭とすべての映像を備えながら、 インデックスだけがないファイルができあがります。MP4 の言葉でいえば、 ファイルには ftyp ヘッダーとメディアデータの mdatブロックはあるのに、それらを索引づける moov アトムが欠けて いる、という状態です。プレーヤーは開こうとしてインデックスが見つからず、 拒否します。ffmpeg のようなツールは、これを率直に moov atom not found と報告します。飛行中や録画中の映像が壊れる原因として、これは 単独で最も多く、そして——ここが大事なのですが——最も復旧しやすいもので もあります。データは生き残っていて、失われたのは地図だけだからです。
録画中の電源喪失を図にすると:映像はカードに届いたのに、カメラが停止時に書くはずのインデックスがついに書かれなかった、という状態です。
その欠けたインデックスをバイト単位でたどり、なぜファイルの末尾にあるのかを 知りたい方は、「moov atom not found」の意味 を ご覧ください。
まずはカメラ自身の修復を試す
GoPro で撮っているなら、最初の一手は無料かつ公式で、しかもほとんどの修復 ガイドはこれを飛ばします。何も売り物にならないからです。GoPro は、たいてい 電池切れやカードの早すぎる抜き取りのあとで、仕上げの済んでいないクリップを 見つけると、次に電源を入れたときにファイルを自分で修復すると申し出ます。 機種によって、画面には修復アイコンか REPAIRING FILE の文字が 表示されます。いずれかのボタンを押して実行させてください。うまくいけば、 ソフトウェアを一切使わずに、カメラからそのまま再生できるクリップが得られます。
カメラ内修復には、設計上の正直な限界が2つあります。直せるのは切り詰められたファイル——まさに上で述べた電源喪失のケース ——だけで、物理的に壊れかけたカードにはどうにもできません。そして、その同じ機種で記録したファイルにしか効きません。カメラが自分の 記録形式についての知識に頼っているからです。修復が堂々巡りしたり止まったり したら、カメラの電源を切り、電池と SD カードを差し直して、次へ進む前にもう 一度だけ試してください。はっきり言っておくと、DJI の機体には GoPro に相当 するカメラ内修復がありません。ですからドローンの映像は、そのまま下の ソフトウェアによる手法へ進みます。
カメラ内修復が失敗するとき
カメラ自身の修復は最初の一手としては優れていますが、あきらめが早く、手を つけようとしない典型的な状況がいくつかあります:
- 書き込み中の電源喪失。 突然の遮断、負荷のかかった状態で 引き抜かれた電池、あるいは空中で電源を失ったドローンは、カメラが修復を 拒む状態のファイルを残すことがあります。
- カードを早く抜いてしまった。 カメラがデータを書き終える 前にカードを取り外すと、次回の起動時にカメラが認識しないかもしれない、 切り詰められたファイルが残ります。
- 録画の途中でカードがいっぱいになった。 クリップの最中に 空き容量が尽きることも、仕上げの済んでいないファイルを取り残すもう一つの 原因です。
- 修復がただ堂々巡りする。 差し直したあともなお完了しない なら、カメラにできることはもうありません。
これらのどれでも、根っこにあるファイルは同じです:映像はあり、インデックスが ない。これは、インデックスをソフトウェアで再構築する仕事であり、しかも ファイルのコピーに対して行い、カード上の原本には手を触れないままにします。
参照クリップという手法
欠けたインデックスを再構築するとは、映像の構造を映像そのものから割り出す ということです。そのための最も確実な方法が参照クリップ——同じカメラで同じ設定で撮った、正常に仕上げの済んだ健全な録画——を使う ことです。健全なクリップは、壊れたファイルが使っていたのとまさに同じ解像度・ フレームレート・コーデック・ビットレートに対応する、完全で正しいインデックスを 備えています。これが再構築に、ぴったり合うテンプレートを与えます。だからこそ、 生き残ったあなたの映像の上に欠けたインデックスを組み直し、再生できるファイルを 書き出せるのです。
これは untrunc のようなコマンドラインツールが行うのと同じ種類の再構築であり、 参照クリップがこれほど重要な理由もここにあります:それは飾りではなく、 再構築があなたのデータを解釈するために読み取る地図なのです。参照クリップは、 同じカメラで同じ設定で数秒間の使い捨ての映像を撮り、そのあと録画を普通に 停止して仕上げさせれば手に入ります。
正直な限界も、先に述べておく価値があります。電源が切れる直前の最後の数秒は、 まだカメラのメモリバッファの中にあってカードには届かなかったので、失われて います。再構築が返すのは、そこまでのすべてです。極端に変動するビットレートで 記録された映像は、音声と映像にわずかなずれを伴って戻ってくることがあります。 そして参照クリップは本当に一致していなければなりません:解像度の違うクリップや 別のカメラのクリップは、噛み合いません。戻ってくるのは、正しいインデックスの 周りに組み直された、あなたの本物の映像であって、でっち上げられたフレームでは ありません。
0 バイトのファイルの場合:修復ではなく復旧
上のどれも当てはまらないケースが1つあります。クリップが 0 バイトと表示される、本来あるべきサイズのごく一部しかない、あるいは途切れのない ゼロの連なりとして開くなら、映像はそもそもカードに届いていません。これは 良いデータの上に壊れたインデックスが乗っているのではなく、データそのものの 不在です。どんな修復ツールも、無からファイルを組み直すことはできません。 できると称するツールは、あなたにスキャン結果を売りつけているだけです。
0 バイトのクリップは、書き込みの途中でカードが壊れたか、ファイルシステムが データの行き先を見失ったことを意味します。正しい最初の一歩は復旧です:カードの復旧ソフトが、ファイルシステムがもう指し示していない映像を、 生のストレージの中から探し出します。何かが見つかれば、そこで初めて修復すべき ファイルが手に入ります。復旧と修復は、この順番で行う2つの別々の仕事であり、 そのどちらも必要にならないよう身を守る最も確実な方法は、いくつかの信頼できる カードの習慣です。SD カードで ファイルを壊さない方法 で扱っています。
よくある質問
録画の途中で電池が切れた GoPro の映像は復旧できますか?
たいていは可能です——ファイルにまともなサイズがあれば。アクションカメラは録画中ずっと映像をカードに書き続け、それらをまとめるインデックスは停止ボタンを押したときにだけ書き込みます。電池切れはその停止を飛ばすので、映像はカードにあってもインデックスがなく、再生できません。そのインデックスを組み直せば、電源が失われたときにまだカメラのメモリバッファに残っていた最後の数秒を除いて、クリップは再び再生できるようになります。0 バイトと表示されるファイルは、別の、より難しい問題です。
GoPro の SOS またはファイル修復アイコンは何を意味しますか?
カメラが、たいていは電源喪失やカードの早すぎる抜き取りのあとで、仕上げの済んでいないクリップに気づき、その修復を申し出ている、という意味です。新しめの機種では修復アイコンか「REPAIRING FILE」の文字が表示されます。いずれかのボタンを押して実行させてください。直せるのは切り詰められたファイルだけで、その同じ機種で記録したファイルにしか効きません。成功すれば再生できるクリップが得られます。堂々巡りしたり失敗したりしたら、カメラの電源を切り、電池と SD カードを差し直し、ソフトウェア修復に移る前にもう一度だけ試してください。
ドローンが墜落したあと、DJI の動画が再生できないのはなぜですか?
電池切れのあとに GoPro のクリップが再生できないのと同じ理由です:墜落や不時着が、録画の仕上げが済む前に電源を断ち、インデックスがカードに一度も書き込まれなかったのです。圧縮された映像はあるのに、索引がついていません。DJI の機体には GoPro に相当する信頼できるカメラ内修復がないので、進む道はインデックスのソフトウェア再構築です。できれば同じドローン・同じ設定で撮った健全なクリップを参照として使います。
GoPro や DJI のファイルが 0 バイトです——修復できますか?
いいえ。修復すべきものが中に何もないからです。0 バイトのファイルは、カードがディレクトリの項目は記録したものの、その裏にデータが一度も着地しなかったことを意味し、これはたいてい書き込み中に壊れたカードか、ファイルシステムの問題を指しています。これは修復の仕事ではなく復旧の仕事です:まずカードの復旧ソフトが生のストレージから映像を探し、何かが見つかったときにだけ、あとで組み直すべきファイルが存在します。
参照クリップは同じ設定である必要がありますか?
はい、できるだけ近いものを。参照クリップは、壊れたファイルに欠けている構造上のテンプレート——解像度、フレームレート、コーデック、ビットレートのプロファイル——を供給します。同じカメラで同じ設定のクリップは、ぴったり合うテンプレートになります。解像度やフレームレートの違うクリップ、あるいは別のカメラのクリップは合わないテンプレートになり、それを無理に当てはめると、正しく再生できない、あるいはまったく再生できないファイルができあがります。
同じ「インデックスが欠けた」話を、別の機器で:壊れた DJI ドローン動画を修復する。