本日は、節分前日。
明日は月曜日なので、我が家は本日行って、子どもたちの豆まきを撮影していた。
最終的にはサバイバルゲームになり、猫もそれに参戦するというもう二度と取れない貴重な映像となったわけだが…
撮影中にスマホがフリーズ!!!
フリーズしてしまって、撮影続行できない!!
急遽、妻のスマホに切り替えたは良いものの、
さっきまで撮影していた映像はぶっ壊れたファイルになってしまった。
スマホが再起動から帰ってきても再生できなくなってしまった。
撮影途中でフリーズしてしまった動画ファイルを復元してみる
というわけで、今日はこの壊れてしまったファイルを復元してみよう。
復元する環境は、ArchLinux。ほかのLinuxでもほぼ似たようなパッケージを入れれば同じ手順で復元は可能だろう。
WindowsやMacでも、これから書くことを読めば復元のヒントとなる方法がわかるかもしれない。
さっそく自分がやった方法だが、
まずは壊れたファイルをパソコンに転送してみた。
使っているスマホはAndroidで、動画ファイルはmp4
VLCPlayerなどで再生をしてみたが、うんともすんともいわない。
そこでffmpegというコマンドをつかって、ファイルの情報がどうなっているのか確認をすることにした。
ffmpeg -i kowareta.mp4
上記のように該当のファイルを指定して、コマンドを実行すると、ファイルの情報が出る。
すると以下の情報が出てきた。
moov atom not found
kowareta.mp4: Invalid data found when processing input
MP4は木構造でデータが構築されていて、その最小単位をアトムという。
moovアトムとは、メタデータが格納されている部分らしい。
そこが破損しているから再生ができないそうだ。
そりゃ最後にちゃんと終了していなかったから最終的なデータとかが書き込まれていないんだろうな。
ただファイル自体は300MBくらいあるので、映像データとしてはちゃんと作られてはいる可能性がある。
moov atom not foundが出た場合の対処
untruncというコマンドで、moovアトムをどうにかできるらしい
ArchだったらAURでuntrunc-gitというパッケージを指定すればインストールできる。
https://github.com/ponchio/untrunc で公開されているので、他の環境だったら直接ビルドをするのがいい。
とりあえず、正常なmp4ファイルが必要らしいので、適当にスマホで動画を撮影してパソコンに転送しておく。
正常なファイルと、untruncが用意できたら、下記コマンドで復元を開始する
untrunc daizyoubu.mp4 kowareta.mp4
正常なmp4ファイルと壊れたmp4ファイルをコマンドに渡すと、正常な方からメタデータを解析して、壊れた方を読み込みうまい具合に解釈して復元をするらしい。
そうすると、kowareta.mp4_fixed.mp4というファイルができるので、
これをVLCなどで再生してみるとちゃんと見れると思う。
自分はそのファイルを直接グーグルフォトにアップロードして、スマホで見るれることを確認した。