破損して再生できないmp4ファイルを修復する方法

ふとパソコンに保存してあるmp4ファイルを再生しようとしたらエラーが出て再生できないといったことないでしょうか。
動画ファイルを保存しているHDDなどのディスクドライブが経年劣化などで破損していった場合、その影響で動画ファイルが壊れてしまうことがあります。
また、動画ファイルを削除した後に復元ソフトを使ってファイルを復旧したはいいものの、再生できなかった・再生できるけどシークできないという時もあるでしょう。
ですが、パソコンを使えば動画ファイルを復旧できる可能性もあるので、mp4ファイルを修復して再生できるようにする方法をいくつか紹介します。
VLC Media Playerを使う
一番オススメは「VLC Media Player」という動画再生フリーソフトを使用する方法です。
VLC Media Playerは動画再生ソフトであり、動画変換ソフトとして使用することは少ないのですが、一応動画変換機能(エンコード機能)も兼ね備えています。
VLC Media Playerのインストールについてはこちらの記事で解説していますので、インストール方法がわからない場合は、下の記事を参考にして準備を進めておいてください。
修復手順
まずはVLC Media Playerを起動しておきましょう。
![VLC Media Playerを起動→メニューの[メディア]->[変換/保存]をクリック](http://s3.ap-northeast-1.amazonaws.com/static.aprico-media.com/production/imgs/images/000/055/784/original.png?1591882762)
起動したら上部メニューの[メディア]->[変換/保存]へと進みます。
![[追加]ボタンをクリックして修復したい動画ファイルを選択](http://s3.ap-northeast-1.amazonaws.com/static.aprico-media.com/production/imgs/images/000/055/785/original.png?1591882763)
[追加]ボタンをクリックして修復したい動画ファイルを選択します。
![[変換/保存]をクリック](http://s3.ap-northeast-1.amazonaws.com/static.aprico-media.com/production/imgs/images/000/055/786/original.png?1591882765)
[変換/保存]をクリックします。
![「出力ファイル」にファイル名を入力して[開始]をクリック](http://s3.ap-northeast-1.amazonaws.com/static.aprico-media.com/production/imgs/images/000/055/787/original.png?1591882766)
「出力ファイル」にファイル名を入力して[開始]をクリックします。
壊れた動画ファイルをエンコードしようとしていることをVLC Media Playerが検出した場合、修復可能な場合は自動的に修復してくれます。

エンコードが完了すると出力先に指したフォルダに修復済みの動画ファイルが保存されています。
特別な知識を必要としないので、まずはVLC Media Playerで動画ファイルの修復を試してみることをお勧めします。
recover_mp4とffmpegを使用する
VLC Media Playerを使わずにコマンドでmp4ファイルを修飾することができます。この方法であればVLC Media Playerを使わずにコマンドで動画ファイルを修復することができます。
ダウンロード
まずはrecover_mp4とffmpegをダウンロードして準備します。
recover_mp4は下記サイトから入手できます。
![recover_mp4にアクセスし、[Download recover_mp4 1.92 Free]をクリック](http://s3.ap-northeast-1.amazonaws.com/static.aprico-media.com/production/imgs/images/000/055/789/original.png?1591882774)
アクセスしたら[Download recover_mp4 1.92 Free]をクリックしてダウンロードしましょう。
ダウンロードしたrecover_mp4は自分がわかりやすいフォルダに保存しておくことをお勧めします。
ダウンロードしたファイルは ZIP 形式なので解凍しましょう。

解凍するとこのようなファイル構成になっているはずです。
これでrecover_mp4の準備完了です。続いてffmpegをダウンロードします。
ffmpegは下記公式サイトからダウンロード可能です。
![ffmpeg公式サイトにアクセスし、[Download]をクリック](http://s3.ap-northeast-1.amazonaws.com/static.aprico-media.com/production/imgs/images/000/055/791/original.png?1591882779)
公式サイトにアクセスしたら[Download]をクリックしてください。
![「Get packages & executable files FFmpeg 」にあるWindows アイコンにカーソル合わせる→[Windows builds by Zeranoe]をクリック](http://s3.ap-northeast-1.amazonaws.com/static.aprico-media.com/production/imgs/images/000/055/792/original.png?1591882780)
次に「Get packages & executable files
FFmpeg 」にあるWindows アイコンにカーソル合わせたら表示される[Windows builds by Zeranoe]をクリックします。
画面中央に大きく表示されている[Download Source Code]ではないので間違えないようにしてください。
![[Download Build]をクリック](http://s3.ap-northeast-1.amazonaws.com/static.aprico-media.com/production/imgs/images/000/055/793/original.png?1591882783)
次に青いボタン[Download Build]をクリックします。
ダウンロードするバージョンなどを変更することが出来ますが、デフォルトで最適なバージョンが選択されているので、分かる人以外は変更するべきではありません。
ダウンロードしたら解凍します。

解凍したら、binフォルダに入っている「ffmpeg.exe」をrecover_mp4があるフォルダと同じフォルダにコピーしてください。

この状態になれば準備完了です。
動画ファイルを修復する
実際にrecover_mp4とffmpegを用いて動画ファイルを修復していきましょう。動画ファイルの修復ではコマンドプロンプト・Windows PowerShellのどちらかを使用します。
コマンドプロンプトを使用する場合、カレントディレクトリの変更など少しハードルの高いコマンド操作が必要(コピーペーストだけでは難しい)なため、今回はWindows PowerShellを使用します。

まずは、修復したい動画ファイルをrecover_mp4とffmpegがあるフォルダに移動させます。
ファイルパス・フォルダパスについて理解している方は移動させる必要はありません。

まず、先ほどrecover_mp4とffmpegを保存したフォルダを開いておいてください。
![上部メニューの[ファイル]をクリック](http://s3.ap-northeast-1.amazonaws.com/static.aprico-media.com/production/imgs/images/000/055/798/original.png?1591882793)
次に、上部メニューの[ファイル]をクリックします。
![[Windows PowerShellを開く]をクリック](http://s3.ap-northeast-1.amazonaws.com/static.aprico-media.com/production/imgs/images/000/055/799/original.png?1591882794)
[Windows PowerShellを開く]をクリックします。
下記コマンドを入力し、動画ファイルが破損しているかチェックします。
.\recover_mp4.exe 動画ファイルパス --analyze
動画ファイルパスはそれぞれ置き換えてください。video.mp4だと以下のようになります。
.\recover_mp4.exe video.mp4 --analyze
次に下記コマンドを実行します。
.\recover_mp4.exe video.mp4 result.h264 result.aac --ambarella

コマンドが正常に完了すると、同じフォルダに「result.h264」と「result.aac」が生成されます。
この処理は少し動画変換処理が行われるため、再生時間が長ければ長いほど時間がかかります。

画面の変化が止まって「Complete!」と表示されたらrecover_mp4による修復の前準備が完了します
続いて下記コマンドでffmpegを使って動画を修復していきます
.\ffmpeg -r 60000/1001 -i result.h264 -i result.aac -bsf:a aac_adtstoasc -c:v copy -c:a copy result.mp4

修復可能な程度にしか破損していない動画ファイルだった場合、正常に再生できるmp4ファイルが生成されます。
完全修復できず動画の一部が飛んでいることもありますが、飛んでいる箇所は修復不可能な再生箇所なので、そちらについては諦めるしかありません。