2017-04-13 60 views
1

我正在做几个小型.avi文件的图像处理。一小部分文件看起来已经损坏。MATLAB:VideoReader错误检查

一种类型的损坏似乎是无法读取的视频的特定帧。我为此添加了try-catch块,它运行良好。

但是,根据VLC,另一种损害类型是“破损或缺失AVI索引”。当VideoReader尝试打开这种类型的损坏文件时,会使Matlab完全崩溃并显示错误,“MATLAB遇到了内部问题,需要关闭。”和细节信息,“在周三四月检测分割违反......”

所以我的问题是,有没有什么办法错误校验/跳过,将导致此崩溃的影片?

回答

2

您可以使用ffmpeg检查视频文件的完整性。

,请参阅:ffmpegHow can I check the integrity of a video file (avi, mpeg, mp4…)?
下载静电的积聚,并把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

感谢。我遇到了一个问题,这似乎适用于错误检查一些破损的索引,但通过就好像他们是在其他人的好视频。我不确定两个视频之间有什么区别,哪两个视频都说索引损坏但会产生两个不同的输出。任何想法? – Austin

+0

如果没有示例文件很难分辨出来......您是使用Windows还是Linux?你可以尝试执行'ffprobe'工具(用'ffmpeg'下载)。尝试搜索AVI特定格式分析工具。 AVI视频文件无需索引即可播放(只是变得不可见)。您可以尝试修复这些文件,我发现使用Google的'DivFix ++'(从未使用过)。 – Rotem