2017-04-13 18 views
1

私は数千の小さな.aviファイルに対していくつかの画像処理を行っています。ファイルの小さなサブセットが破損しているように見えます。MATLAB:VideoReaderのエラーチェック

1つのタイプのダメージは、読み込めないビデオの特定のフレームのようです。このためにtry-catchブロックが追加され、うまく機能します。

しかし、もう1つのタイプのダメージは、VLCによると、「壊れた、または欠落しているAVIインデックス」です。 VideoReaderがこの種のダメージを与えてファイルを開こうとすると、Matlabはエラーで完全にクラッシュします。「MATLABに内部問題があり、終了する必要があります。詳細メッセージ "Wed Aprにセグメンテーション違反が検出されました..."

私の質問は、このクラッシュの原因となるエラーのチェック/スキップの方法はありますか?

答えて

2

ffmpegを使用して、ビデオファイルの整合性をチェックすることができます。

参照:How can I check the integrity of a video file (avi, mpeg, mp4…)?
ffmpegの静的ビルドをダウンロードし、作業ディレクトリにffmpeg.exeを置きます。

systemコマンドを使用してMatlab内でffmpegを実行し、戻り状態を確認してください。
ステータスがゼロでない場合、ビデオファイルが破損しています。
さらに細かいロジックについては、出力エラーメッセージを解析することもできます。

filename = 'input.avi'; 

if (isunix) 
    [status, cmdout] = system(['ffmpeg.exe -v error -i ', filename, ' -f null - 2']); 
else 
    [status, cmdout] = system(['ffmpeg.exe -v error -i ', filename, ' -f null - 2>&1']); 
end 

if (status ~= 0) 
    %Dispaly cmdout if file is damaged. 
    disp([filename, ' is corrupted. Error: ', cmdout]); 
end 
+0

ありがとう:ここ

は、コードサンプルです。私は問題に直面していますが、これはいくつかの壊れたインデックスをチェックするエラーのために働くと思われますが、他の人には良いビデオであるかのように渡ります。 2つのビデオの間に違いがあるのか​​どうかはわかりません。両方のビデオでは、壊れたインデックスが2つの異なる出力を生成しています。何か案が? – Austin

+0

サンプルファイルなしではわかりにくいです... WindowsまたはLinuxを使用していますか? 'ffprobe'ツール(' ffmpeg'でダウンロード)を実行してみてください。 AVI固有のフォーマット解析ツールを検索してみてください。 AVIビデオファイルは、索引なしで再生できます(見た目には分かりません)。あなたはファイルを修正しようとすることができます、私は 'DivFix + +' Googleを使用して(それを使用していない)が見つかりました。 – Rotem

関連する問題