昨日私は自分の携帯電話でシーンを撮影していましたが、突然アプリケーションがクラッシュし、私が生成した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行は赤で表示されます。
Untrunc を使用して、壊れたmp4またはm4vファイルを修復することが可能です。
この方法では以下が必要です。
ではないbrokenの別のビデオファイル
linuxインストール(私はUbuntu 12.04を使用しました)とコマンドラインを使用する基本的な能力。
これは何をすべきかです:
このコマンドでいくつかの必要なライブラリをインストールします。
Sudo apt-get install libavformat-dev libavcodec-dev libavutil-dev
GithubリポジトリからUntruncのソースコードをダウンロードしてください。
wget https://github.com/ponchio/untrunc/archive/master.Zip
ソースコードを解凍します。
unzip master.Zip
解凍されたディレクトリに移動します。
cd untrunc-master
このコマンドを使用してソースコードをコンパイルします(すべて1行)。
g++ -o untrunc file.cpp main.cpp track.cpp atom.cpp mp4.cpp -L/usr/local/lib -lavformat -lavcodec -lavutil
(このステップを飛ばして用意されている実行ファイルを使ってみることもできますが、うまくいきませんでした)
それからあなたは実際にビデオを修正することができます。壊れたビデオと実例ビデオの両方が必要です。
理想的には、ビデオは同じカメラからのもので、同じ解像度を持つべきです(私のものですが、それがなくてもうまくいくかもしれません)。それが少なくとも壊れたものと同じくらい長いなら(できれば大体同じであるなら)、これは助けになるかもしれません。
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に感謝します。]
他の誰かがこれについてつまずいた場合、私はまた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/?Solutions:HD_Video_Repair_Utility )というプログラムにリンクしています。宝物よりはるかに安いです( http://aeroquartet.com/movierepair/repair )。彼らは、何もコストがかからないそれ以前のバージョン(バージョン1.5)があると指摘しさえしました( http://nagasoft.cn/download/videorepair1.5.Zip )!
私はバージョン1.5を使ってファイルを修復しようとしました、そしてそれは部分的に働いてもらいました。 ffmpegで再エンコードした後(エラーがいくつかありました)、音声の一部がなくなったことに気付きました。ログには(喜んでVideo Repair Utilityにはいくつかあります)、与えられた時間の後でそれ以上のオーディオの言及はありませんでした。そのままそれを取ります...
@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という名前のファイルが作成されました。このスレッドを開始していただきありがとうございます。
最近のUbuntuディストリビューションをお持ちの場合は、docker
をインストールして次のコマンドを実行できます。
docker run -v `pwd`:/vol -it synctree/untrunc /vol/GOOD-reference-file.MP4 /vol/BAD-corrupt-file.mdt
より詳しい説明については他のコメントを読んでください。
これは私にとって最速でした!
Untruncがあなたのファイル内のコーデックをサポートしていない場合は、16進エディタで修正することができます。
mdat
セクションを "broken"ファイルのmdat
セクションに置き換えます(つまり、 'mdat'の後のバイトのみをコピーします)。mdat
セクションのサイズを指定し、現在の値は古いサイズ( "ok"ファイルのmdat
セクションのサイズ)になり、新しいサイズに置き換えます( "壊れた"ファイルmdat
セクションサイズ)私はそれを行うための簡単なプログラムをコーディングしてしまいました。 https://github.com/golimarrrr/fix-3gp
プログラムと手動で16進エディタを使用すると、同じ固定ファイルが作成されるはずです。