m4v または mp4 ビデオ ファイルを開いて修復するにはどうすればいいですか?

m4v または mp4 ビデオ ファイルを開いて修復するにはどうすればいいですか?

昨日、携帯電話でシーンを撮影していたのですが、突然アプリケーションがクラッシュし、生成された m4v を開こうとすると、破損していると表示されます。

ビデオ ファイル (約 36 MB) を PC にダウンロードし、それを開いて修復しようとしています。方法を提案していただけますか?

FFMPEG情報

コメントで提案されているように、このコマンドを使用して、FFMPEGがそのファイルについて何を言っているかを確認しようとします。

ffmpeg.exe -i VID_20120425_144739.m4v -c:v copy -c:a copy out.mp4 2> log.txt

結果は次のとおりです。

ffmpeg version N-40126-ga4b58fd Copyright (c) 2000-2012 the FFmpeg developers
  built on Apr 26 2012 03:29:50 with gcc 4.6.3
  configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-runtime-cpudetect --enable-avisynth --enable-bzlib --enable-frei0r --enable-libass --enable-libcelt --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libfreetype --enable-libgsm --enable-libmp3lame --enable-libnut --enable-libopenjpeg --enable-librtmp --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libutvideo --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxavs --enable-libxvid --enable-zlib
  libavutil      51. 47.100 / 51. 47.100
  libavcodec     54. 15.100 / 54. 15.100
  libavformat    54.  3.100 / 54.  3.100
  libavdevice    53.  4.100 / 53.  4.100
  libavfilter     2. 72.100 /  2. 72.100
  libswscale      2.  1.100 /  2.  1.100
  libswresample   0. 11.100 /  0. 11.100
  libpostproc    52.  0.100 / 52.  0.100
[mov,mp4,m4a,3gp,3g2,mj2 @ 003fc940] moov atom not found
VID_20120425_144739.m4v: Invalid data found when processing input

最新の2行が赤で表示されます。

答え1

壊れたmp4またはm4vファイルを修復するには、切り捨て

この方法では、同じデバイスから別のビデオファイルが必要になります。ない壊れた。

インストールする方法untrunc

コンパイルにはLinuxのインストール(理想的にはUbuntu)とコマンドラインを使用する基本的なスキルが必要です。この部分をスキップしてuntruncDocker経由で実行することもできます(答えは以下)、もしあれば。

やるべきことは次のとおりです:

  1. 次のコマンドでいくつかの前提条件ライブラリをインストールします。

    sudo apt-get install libavformat-dev libavcodec-dev libavutil-dev

  2. GitHub リポジトリから Untrunc のソース コードを取得します (1 つの方法を選択してください):

    • wget https://github.com/ponchio/untrunc/archive/master.zip && unzip master.zip && cd untrunc-master
    • またはgit clone https://github.com/ponchio/untrunc.git && cd untrunc
  3. 次のコマンドを使用してソース コードをコンパイルします (すべて 1 行)。

    g++ -o untrunc file.cpp main.cpp track.cpp atom.cpp mp4.cpp -L/usr/local/lib -lavformat -lavcodec -lavutil

    (この手順をスキップして、用意されている実行可能ファイルを使用することもできますが、私の場合はうまくいきませんでした)

  4. その後、実際にビデオを修正できます。壊れたビデオと、実際に動作するビデオのサンプルの両方が必要です。

ビデオを修正する方法

動作する別のビデオを探します。理想的には同じカメラからのもので、できれば壊れたカメラと同じかそれ以上の長さのビデオ、また可能であれば同じ解像度のものを探します (必須ではありませんが、役に立つと思います)。

Untrunc を解凍してコンパイルしたフォルダーでこのコマンドを実行しますが、/path/to/...ビットを 2 つのビデオ ファイルに置き換えます。

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

その後、処理が進み、再生可能なファイルが生成されます。broken-video_fixed.m4v

これで完了です!

これで、VLC Media Player でファイルを再生できるはずです。ただし、間違った長さの情報が報告されている可能性があります (Untrunc はこれを推測/解決しようとしますが、必ずしも正しくなるとは限りません)。これを修正するには、別のプログラムを使用してビデオを再エンコードしてみてください。

[Untrunc を試してみることを提案してくれた slhck のコメントに感謝します。]

[この問題を解決するために、最初に Untrunc をコーディングしてくれた Federico Ponchio に感謝します。]

答え2

以下をインストールdockerして実行できます (すべての主要なオペレーティング システムで利用可能)。

docker run -v $(pwd):/vol -it synctree/untrunc /vol/GOOD-reference-file.MP4 /vol/BAD-corrupt-file.mdt

構文は、Linux または macOS の Bash 用です。ここで、GOOD-reference-file.MP4と は両方とも現在のディレクトリに存在する必要があり、ディレクトリはDocker コンテナにBAD-corrupt-file.md5マウントされます。/vol

より詳しい説明については、他のコメントを読んでください。

私にとってはこれが一番早かったです!

答え3

もし他の誰かがこれに遭遇したら、私も sparrowt が話していたアプリを試しましたが、うまくいきませんでした (開発者リポジトリで私が作成したバグレポートを参照してください)。おそらくこれは、mp4 ファイルではなく MOV ファイルだったためでしょう...

私にとって役に立ったのは次の投稿です:http://muzso.hu/2012/11/14/how-to-fix-a-broken-mp4-mov-video-ffmpeg-reports-moov-atom-not-found

これらは「HDビデオ修復ユーティリティ」と呼ばれるプログラムにリンクしています(http://grauonline.de/cmsimple2_6/en/?ソリューション:HD_Video_Repair_Utility)、これはTreasured(http://aeroquartet.com/movierepair/repair)。彼らは、以前のバージョン(バージョン1.5)には費用がかからなかったことさえ指摘しました(http://nagasoft.cn/download/videorepair1.5.zip)!

バージョン 1.5 を使用してファイルを修復しようとしたところ、部分的に機能しました。ffmpeg で再エンコードした後 (いくつかエラーが発生しました)、オーディオの一部が消えていることに気付きました。ログ (幸い、ビデオ修復ユーティリティにはログがあります) には、一定時間後にオーディオに関する記述はありませんでした。このまま受け入れます...

答え4

untrunc がファイル内のコーデックをサポートしていない場合は、16 進エディターで修正してみてください。

  1. 同じ形式の別のファイルを入手してください。私はもっと大きなファイルを入手しましたが、おそらくどの長さでも問題ありません。
  2. 両方のファイルを16進エディタで開く
  3. mdat「ok」ファイルのセクションをmdat、ヘッダーなしで「broken」ファイルのセクションに置き換えます(つまり、「mdat」の後のバイトのみをコピーします)。
  4. おそらくすでにそのように動作しているはずですが、そうでない場合は、「mdat」の前の 4 バイトでmdatセクションのサイズを指定します。現在の値は古いサイズ (「正常な」ファイル セクション サイズ) になりmdat、新しいサイズ (「壊れた」ファイルmdatセクション サイズ)に置き換えられます。

結局、それを実行するための簡単なプログラムをコーディングしました。https://github.com/golimarrrr/fix-3gp より

プログラムと16進エディタを使用した手動の両方で同じ固定ファイルを作成する必要があります。

関連情報