壊れた動画ファイルの復旧
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時間くらいかけて復旧完了
無事再生出来る動画が生成されてて感動しました
この記事が気に入ったらサポートをしてみませんか?