壊れたmp4ファイルを無料のツールmp4fixerを使って復旧する方法を紹介します。
私はパソコン上の操作を録画して、再現する手順を紹介する動画を作ることがありますが、録画中にシャットダウンするなどして録画していたファイルが壊れてしまうことがあります。
きちんと録画を停止してからシャットダウンすれば問題ないのですが、つい停止するのを忘れて、やってしまうことがあります…
”mp4 修復 無料”などでWeb検索すると、上位は有料ツールに誘導する記事で埋め尽くされていて、無料ツールで復旧する方法がまるで見つからずに困っている方も多いのではないでしょうか。(私もそうでした)
以下の動画に本記事の手順を実行した際の様子を記録していますので、よろしければ参考にしてください。
Windows版:
Mac版:
動作環境
WindowsとMac(Intel CPU)の両方で動作することを確認しています。
WindowsはWSL2という仮想環境にUbuntuをインストールした環境で実行しましたが、perlやgccが動作する環境であればWindowsネイティブ環境でも動くと思います。
使用OS | Windows11/WSL2 Ubuntu 20.04LTS | macOS Moterey 12.4, macOS Catalina 10.15.7 |
perl version | v5.30.0 | v5.30.3 |
gcc version | 9.3.0 (Ubuntu 9.3.0-17ubuntu1~20.04) | clang-1103.0.32.62 |
事前準備
事前準備の内容がWindowsとMacで異なりますので、個別に説明します。
Windows
Windowsメニューの虫眼鏡マークに”powershell”と入力するなどしてPower Shellを見つけ、管理者権限で立ち上げ、以下のコマンドでWSL2 Ubuntu-20.04 LTSをインストールします。
PS> wsl --install -d Ubuntu-20.04
以下のコマンドでWSL2 Ubuntuを起動します。
PS> wsl
ここからはWSL2 Ubuntuのターミナル上の操作になります。
git、ffmpeg、libfaad-devをインストールしておきます。
sudo apt-get update sudo apt-get install git ffmpeg libfaad-dev
Mac
HomeBrewをインストールしていない場合はインストールします。
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
ffmpeg、faad2をインストールしておきます。
brew install ffmpeg faad2
mp4fixerによる復旧
任意のディレクトリで以下のコマンドを実行することでmp4fixerをダウンロードし、できたディレクトリに移動します。
git clone https://github.com/bookkojot/mp4fixer cd mp4fixer
音声変換に使用するaacfixerをコンパイルします。
gcc aac.c -L. -lfaad -lm -o aacfixer
以下のようにfixer.pl
の引数として、問題ないmp4ファイル(壊れたファイルと同じ設定で録画したもの)、壊れたmp4ファイルを指定して実行します。
perl fixer.pl <good_file.mp4> <bad_file.mp4> output
上記コマンドの最後の引数は、出力ファイルに付ける名称で、ここではoutputとしましたが、他の文字列でも構いません。
修復された映像ファイルoutput-out-video.h264
、音声ファイルoutput-out-audio.raw
が出力されます。
映像ファイルは以下のコマンドで再生確認できます。
ffplay output-out-video.h264
続いて、音声ファイルを変換します。
./aacfixer output-headers.aac output-out-audio.raw
最後に映像と音声を結合してmp4ファイルにします。
ffmpeg -i output-out-video.h264 -i output-out-audio.raw-pure.wav -c:v copy -c:a aac -map 0:v:0 -map 1:a:0 output-out-video.mp4
これでできたoutput-out-video.mp4
が最終的に復元されたmp4ファイルになります。
まとめ
録画の失敗で壊れてしまったmp4動画ファイルをmp4fixerを使って復旧することができました。
mp4fixerは、正常なmp4ファイルと壊れたmp4を入力として、正常な方から必要な情報を取り出して壊れたmp4を修復し、映像と音声を別のファイルとして生成します。
出力映像ファイル:output-out-video.h264
出力音声ファイル:output-out-audio.raw
音声は付属のツールで変換することで再生できるファイルになりました。
変換後音声ファイル:output-out-audio.raw-pure.wav
そして、最後にffmpegの機能で出力映像ファイルと変換後音声ファイルを結合して、動画ファイルを復旧することに成功しました。
復旧した音声入り動画ファイル:output-out-video.mp4
少し手間がかかりますが、高額な有料ツールを使わずに復元できたのは大変助かりました。
mp4fixerの作者の方に感謝です!
あとがき
今回の復旧の試行をしていた最初の段階で、VLCというツールを試したのですが、こちらは私のケースではうまく復旧できませんでした。
次に試したWondershare Repairitは、復旧に成功し、プレビューで動画の確認まではできました。ただ・・・
無料かと思って使ったのですが、復旧した動画をmp4に保存するには月7000円くらいの利用料を支払う必要があり、そこまで払いたくなかったので断念しました。
ところが、Wondershare Repairitの復旧の方法が、正常に録画したmp4と壊れたmp4の両方を入力して、正常な方から必要な設定を読み取るという仕組みで、ここにヒントを得て、この手法で復旧するフリーソフトがGitHubにあるはずと思い、検索して見つけたのが、今回紹介したmp4fixerでした。
もう一つGitHubで見つけたUntruncというツールも試したのですが、私の環境ではうまく復旧できませんでした。
壊れたmp4でお悩みの方の助けになれば幸いです。
書籍紹介
新しいLinuxの教科書
Linuxコマンドラインの使い方やシェルスクリプトの書き方、ファイルバージョン管理などの説明があり、これからLinuxで開発を始めたい方におすすめの入門書です。
参考文献
GitHub bookkojot/mp4fixer (https://github.com/bookkojot/mp4fixer)