
昨日、携帯電話でシーンを撮影していたのですが、突然アプリケーションがクラッシュし、生成された 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)とコマンドラインを使用する基本的なスキルが必要です。この部分をスキップしてuntrunc
Docker経由で実行することもできます(答えは以下)、もしあれば。
やるべきことは次のとおりです:
次のコマンドでいくつかの前提条件ライブラリをインストールします。
sudo apt-get install libavformat-dev libavcodec-dev libavutil-dev
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
次のコマンドを使用してソース コードをコンパイルします (すべて 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 に感謝します。]
答え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 進エディターで修正してみてください。
- 同じ形式の別のファイルを入手してください。私はもっと大きなファイルを入手しましたが、おそらくどの長さでも問題ありません。
- 両方のファイルを16進エディタで開く
mdat
「ok」ファイルのセクションをmdat
、ヘッダーなしで「broken」ファイルのセクションに置き換えます(つまり、「mdat」の後のバイトのみをコピーします)。- おそらくすでにそのように動作しているはずですが、そうでない場合は、「mdat」の前の 4 バイトで
mdat
セクションのサイズを指定します。現在の値は古いサイズ (「正常な」ファイル セクション サイズ) になりmdat
、新しいサイズ (「壊れた」ファイルmdat
セクション サイズ)に置き換えられます。
結局、それを実行するための簡単なプログラムをコーディングしました。https://github.com/golimarrrr/fix-3gp より
プログラムと16進エディタを使用した手動の両方で同じ固定ファイルを作成する必要があります。