壊れた動画ファイルの復旧

Youtubeからyoutube-dlを使って動画をダウンロードしたのだけれど最後までダウンロードしきる前に強制終了させてしまった結果、どのプレイヤーを使っても全く再生できない動画ファイルが残ってしまったときの対処法です

もう一回ダウンロードすればいい話なのですが、自分のケースでは不幸にもすでにYoutubeの動画は削除されて見られなくなっていました

半ばあきらめていたのですが、データ自体はファイル内に残っているはずなのでダメもとで復旧に挑戦しました

ちなみに ffmpeg で開いてみようとすると以下のようなメッセージが表示されます(意味は分かりませんがとにかくおかしいらしいです)

>ffmpeg -i broken.mp4

[mov,mp4,m4a,3gp,3g2,mj2 @ 0000020fff738bc0] moov atom not found
broken.mp4: Invalid data found when processing input

結果から言うと untrunc というコマンドラインで動くソフトを使って無事復旧できました

ダウンロードは以下のサイトから(ただし、ソースコードから自分でコンパイルする必要があり、LinuxやMacで使う説明はありますが、Windowsで使うのは難しいかもしれません)

さらに、このソフトを使う上で大事なことは、復旧するには壊れていない同じようなフォーマットのファイルも必要だということです

今回のケースはYoutubeから同様に他の動画を適当にダウンロードすれば、解像度とかが一緒であればいける可能性は高いと思います

以下、Macでのインストールの手順をまとめます

まず、untruncのinstallにはlibavも必要なそうなので、上記のページに書いてある通りに以下のようにlibavのインストールを行いました

wget https://libav.org/releases/libav-12.3.tar.xz
wget https://github.com/ponchio/untrunc/archive/master.zip
unzip master.zip
tar -xJf libav-12.3.tar.xz -C untrunc-master
cd untrunc-master/libav-12.3/
./configure

configure 実行まで行ったところで、nasm/yasm not found というエラーが出ました

エラーログでは --disable-yasm を付けて実行してくださいと表示されているけれど、作者のページではそれはやらないようにと言っています

今回はMac環境なので Homebrew を使って以下のようにyasmをインストールします(Homebrewのインストールが必要な人もいるかと思います)

brew install yasm

再び ./configure で無事成功

インストールの説明に従ってlibavのmakeとuntrancのビルド

make
cd ..
g++ -o untrunc file.cpp main.cpp track.cpp atom.cpp mp4.cpp -I./libav-12.3 -L./libav-12.3/libavformat -lavformat -L./libav-12.3/libavcodec -lavcodec -L./libav-12.3/libavresample -lavresample -L./libav-12.3/libavutil -lavutil -lpthread -lz -framework CoreFoundation -framework CoreVideo -framework VideoDecodeAcceleration -lbz2 -DOSX

untrancが生成されたので、以下のコマンドでファイルの復旧に挑戦

./untrunc /path/to/working-video.m4v /path/to/broken-video.m4v

動画が1時間以上あるからなのか一時間たっても終わらず、寝ながら放置で4時間くらいかけて復旧完了

無事再生出来る動画が生成されてて感動しました

この記事が気に入ったらサポートをしてみませんか?