untrunc で壊れた動画ファイルの修復を試みた2023年01月22日 13時23分51秒

実はこれを試したのは昨年の夏頃。それなので、untrunc のコード自体は半年前の物。これを書く時点で、コマンドは試したので現在でも通用する。試したのは、FreeBSD 12.3-RELEASE と 12.4-RELEASE になる。

untrunc は破損した mp4 と mov ファイルを修復するプログラム。ご察しの通り、動画を一枚壊してしまったのだった。動画修復プログラムを探して見付けたのが untrunc。しかし、FreeBSD の ports には入っていなかった。

README.md を読むと、コンパイルのやり方が書いてある。しかし、書いてある通りだとコンパイルできなかったので、修正したのが以下の通り。

% git clone https://github.com/ponchio/untrunc
% cd untrunc/libav
% ./configure --cc=cc
% gmake
% cd ..
% c++ -o untrunc -I./libav file.cpp main.cpp track.cpp atom.cp
p 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 -l
pthread -lz -lbz2
git clone でコードを直接取得。libav は configure で作れる。libav は gcc を仮定しているので、--cc で clang の cc を明示的に渡す。その後は、make では無く gmake。

最後のコマンドの README.md からを元に。しかし、そのままではリンクに失敗。-lbz2 を追加したら完成した。

このプログラムに正常なファイルと壊れたファイルを渡す。

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

残念ながら、今回のファイルはこれでは直せなかった。