MATLAB:VideoReader 错误检查

MATLAB: VideoReader error checking

我正在对几千个小 .avi 文件进行一些图像处理。一小部分文件似乎已损坏。

一种损坏似乎是无法读入视频的特定帧。我为此添加了一个 try-catch 块,效果很好。

然而,根据 VLC,另一种类型的损坏是 "Broken or missing AVI Index"。当 VideoReader 尝试打开具有此类损坏的文件时,它会导致 Matlab 完全崩溃,并显示错误 "MATLAB has encountered an internal problem and needs to close." 和详细消息 "Segmentation violation detected at Wed Apr ..."

所以我的问题是,有没有什么方法可以让 check/skip 视频出错,从而导致崩溃?

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

参见:How can I check the integrity of a video file (avi, mpeg, mp4…)?
下载 ffmpeg 的静态构建,并将 ffmpeg.exe 放入您的工作目录。

在 Matlab 中使用 system 命令执行 ffmpeg,并检查 return 状态。
如果状态不为零,则视频文件已损坏。
您还可以解析输出错误消息以获得更精细的逻辑。

这是一个代码示例:

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