m4vまたはmp4ビデオファイルを開いて修復する方法は?


59

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

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

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行は赤で表示されます。


私のOSはWindows 7ですが、必要に応じてLinuxベースのディストリビューションで仮想マシンを準備できます。
ドレイク

@slhck助けてくれてありがとう、私はあなたが提案した質問を更新した。
ドレイク

7
ああ、それは私が期待したことです。MOOVアトムは、MP4 / M4Vコンテナー内の生のビデオストリームにアクセスするために必要なデータです。オンラインにはたくさんの「ビデオ修復」ツールがありますが、私はそれらのほとんどを信用しません。確かにあなたは彼らに打撃を与えることができます-ただ何も支払わないでください。有望に見えるのはUntrunkで、これはこの正確な問題(つまり、MOOVアトムの欠落)のためにコーディングされているようです。またはAtomicParsley。幸運を!
-slhck

1
AtomicParsleyで壊れたmp4を修正するにはどうすればよいですか?
チョビー

回答:


60

Untruncを使用して、破損したmp4またはm4vファイルを修復することができます。

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

インストールする方法 untrunc

コンパイルするには、Linuxのインストール(理想的にはUbuntu)とコマンドラインを使用する基本的な機能が必要です。また、この部分をスキップしuntruncて、Docker を介して実行することもできます(下記の回答を参照)。

これは何をすべきかです:

  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に感謝します。]


ここで完全な指示を提供してくれてありがとう!
-slhck

3
ありがとう@Alexリンクを更新しました。面白いことに、githubのReadmeはこの答えに基づいています!
スパロート

1
Windowsベースのソリューションを提供します。< superuser.com/questions/938185/recover-incomplete-video-files > Linuxディストリビューションでインターネットにアクセスできないため。
RogUE

2
FWIWこれは私のために再生可能なビデオを生成しませんでした-しかし、ワイン経由でrecover_mp4_to_h264を実行するとうまくいきました。
コンパイラ

1
Untruncは機能しましたが、両方のビデオファイルを、という名前の隠し.untruncフォルダーのサブディレクトリに配置する必要がありましたuntrunc-master。次に、次を実行します。./untrunc goodfile.mp4 badfile.mp4 2gbファイルの場合は約3分かかり、オーディオを再同期するだけで済みました。それ以外は大丈夫でした。
user8547

8

他の誰かがこれにつまずいた場合、私はアプリ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/?Solu​​tions:HD_Video_Repair_Utility秘蔵よりもはるかに安価である)、(http://aeroquartet.com/movierepair/repair) 。彼らは、以前のバージョン(バージョン1.5)には何も費用がかからなかった(http://nagasoft.cn/download/videorepair1.5.zip)ことさえ指摘しました!

バージョン1.5を使用してファイルを修復しようとしましたが、部分的に機能しました。ffmpegで再エンコードした後(エラーが発生しました)、音声の一部がなくなっていることに気付きました。ログには(嬉しいことに、ビデオ修復ユーティリティにいくつかあります)、一定時間後の音声に関する言及はありませんでした。そのまま取ります...


3
DROPBOXのURLが無効です。代わりが見つかりました: nagasoft.cn/download/videorepair1.5.zip
T.Todua

2
@ T.Todua、通知ありがとう。dropbox-linkをあなたが提供したリンクに置き換えました。
SimonSimCity

8

以下をインストールして実行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.MP4BAD-corrupt-file.md5両方とも現在のディレクトリに存在する必要があり、ディレクトリは/volDockerコンテナにマウントされます。

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

これは私にとって最速でした!


ありがとう@slhckは、Dockerfile誰もがあなたのコンピュータ上でそれを実行する前に、これが実行されるかを確認したい場合は、ここで提供されています:github.com/synctree/docker-untruncもありDockerfile、実際にuntrunc今のリポジトリ-私はどちらかテストしたり比較したりしていませんそれらを詳細に説明しますが、完全を期す
sparrowt

7

@sparrowt最近のUbuntu 16.10インストールでは、現在の指示が機能しませんでした。untruncのコンパイル中に次のエラーが発生しました。

track.cpp: In member function ‘int Codec::getLength(unsigned char*, int)’:
track.cpp:204:40: error: ‘avcodec_alloc_frame’ was not declared in this scope
   AVFrame *frame = avcodec_alloc_frame();

untruncリポジトリで説明されているように、Ubuntuリポジトリのバージョンを使用するのではなく、libavを個別にダウンロードする必要がある場合があります。次のコードは私のために働いた:

sudo apt-get install unzip yasm g++ zlib1g-dev libbz2-dev
cd /tmp/
wget https://github.com/ponchio/untrunc/archive/master.zip
unzip master.zip
cd untrunc-master
wget http://libav.org/releases/libav-12.2.tar.xz
tar xvf libav-12.2.tar.xz
cd libav-12.2
./configure
make
cd ..
g++ -o untrunc file.cpp main.cpp track.cpp atom.cpp mp4.cpp -I./libav-12.2 -L./libav-12.2/libavformat -lavformat -L./libav-12.2/libavcodec -lavcodec -L./libav-12.2/libavresample -lavresample -L./libav-12.2/libavutil -lavutil -lpthread -lz -lbz2
./untrunc /path/to/working-video.mp4 /path/to/broken-video.mp4

これにより、broken-video_fixed.mp4という名前のファイルが作成されました。このスレッドを開始していただきありがとうございます。


1
ありがとうございました!untruncコンパイル行で、私は「「BZ2_bzDecompressInit `未定義の参照」の線に沿っていくつかのエラーを持っていた、私は-lbz2追加する必要がありました
アンドリュー・スマート

大きなファイルを処理できません。ただあきらめます。
ケンシャープ

あなたのlibavにはが含まれていh264dec.hますか?理由track.cpp/:それを含めるしようとしていると私はどこにでもそれを見つけるカント
x29a

その依存関係をコミットしながら添加したgithub.com/ponchio/untrunc/commit/...私は今あなたがむしろのLibav-0.8.7よりのLibav-12.2をdonwloadする必要があると信じて10月10日、2017年に
freeseek

最終的に、これをUbuntu 14.04.5 LTSで動作するようにしました。を実行する必要sudo apt-get install yasmsudo apt-get install libbz2-devあり、「clock_gettime」への未定義の参照を克服するに-lrtは、g++コマンドラインの最後に追加します(stackoverflow.com/a/2418175/550712を参照)。動画の約3分の2を変換しました。
マークベリー

2

untruncがファイル内のコーデックをサポートしていない場合は、16進エディターで修正を試みることができます。

  1. 同じ形式の別のファイルを取得し、より大きなファイルを取得しましたが、おそらく任意の長さが機能します
  2. 16進エディタで両方のファイルを開きます
  3. 置き換えるmdatと、「OK」ファイルのセクションmdat(すなわち「mdatの」の後バイトのみをコピー)ヘッダなしで、「壊れた」ファイルのセクションを
  4. おそらく既にそのように動作します。そうでない場合、「mdat」の前の4バイトがmdatセクションのサイズを指定し、現在の値は古いサイズ(「ok」ファイルmdatセクションサイズ)になり、新しいサイズ(「破損」ファイルmdatセクションサイズ)

私はそれを行う簡単なプログラムをコーディングすることになりました:https : //github.com/golimarrrr/fix-3gp

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


-3

VLC Playerでファイルを開こうとしましたか?通常、破損したファイルの修復には非常に優れています。


8
これは、インデックスをメモリに構築できるAVIファイルにも当てはまると思いますが、MP4ファイルでは、ffmpeg処理中に「moov atom not found」というエラーが発生し、VLCで何も再生されません。

2
VLCは、私の場合(.movファイル)
-rogerdpack
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.