untrunc
コマンドを使って破損した動画を修復します。
この記事はやり方を書いてる記事が他に見当たらなかったので、初学者が自力でなんか出来た方法を書いてるだけです。他に詳しそうな記事があればそちらを参考にしてください
untruncコマンドのインストール
↓ソース元
https://github.com/ponchio/untrunc
ここのinstalling from gitの手順通りにやればインストールできます。
作業ディレクトリはよく分からないなら一応ダウンロードフォルダでやりましょう。
具体的には下のコマンド達を1行1行やるだけです。
git clone --recurse-submodules https://github.com/ponchio/untrunc
cd untrunc/libav
./configure
make
cd ..
g++ -o untrunc -I./libav file.cpp main.cpp track.cpp atom.cpp codec_*.cpp codecstats.cpp codec.cpp mp4.cpp log.cpp -L./libav/libavformat -lavformat -L./libav/libavcodec -lavcodec -L./libav/libavresample -lavresample -L./libav/libavutil -lavutil -lpthread -lz -std=c++11
sudo install -vpm 755 ./untrunc /usr/local/bin/
which -a untrunc
ただし自分がやったときは./configureを実行した時に下のような注意が出ました。
asm/yasm not found or too old. Use --disable-x86asm for a crippled build.
これはここに書いてある通り、--disable-x86asm
を./configureの後に付ければ大丈夫です。
そして上の手順を進めると次はg++…のコマンドでエラーが起きます。しかしこれはソース元にも書かれてるように適切なオプションを最後に付け加えればOKです。
Depending on your system and Libav configure options you might need to add extra flags to the command line:
add -lbz2 for errors like undefined reference to 'BZ2_bzDecompressInit',
add -llzma for errors like undefined reference to 'lzma_stream_decoder',
add -lX11 for errors like undefined reference to 'XOpenDisplay',
add -lvdpau for errors like undefined reference to 'VDPAU...',
add -ldl for errors like undefined reference to 'dlopen'.
On macOS add the following (tested on OSX 10.12.6):
add -framework CoreFoundation -framework CoreVideo -framework VideoDecodeAcceleration.
この文章には要は「こういうエラーが出た時はこのオプション付けてね」とざっくり書いてます。なので例えばエラー文にBZ2_bzDecompressInitと書いていればg++…のコマンドの最後に-lbz2
をつけてください。
Macの場合は最後に書かれてる-frame…のオプションもつけてください。
これであとは手順通りに進めればインストールできるはずです。
untruncの使い方
untruncのファイルが置かれている場所(上の手順を終えた後なら今いるディレクトリ)で以下のコマンドを入れれば動画ファイルを修復できます。
./untrunc /path/to/working-video.m4v /path/to/broken-video.m4v
ここで必要になるファイルは二つ、「修復したい動画ファイル」と「修復したい動画ファイルと同じ方法で撮影したけど、破損しなかった正常な動画ファイル」です。これは正常な動画ファイルを参考に破損した動画を修復するからです。撮影方法や録画方法が同じならいいので動画内容は別になんでもいいです。
この「正常な動画ファイル」のパスを上のコマンドの/path/to/working-video.m4vのところに、「修復したい動画ファイル」のパスをもう一つの方に置き換えてください。それで修復できるはずです。
修復結果は新しい動画ファイルとして破損した動画ファイルのある場所に出力されます。
まとめ
・untruncコマンドで動画を修復できる