我正在对几千个小.avi文件进行一些图像处理。一小部分文件似乎已损坏。
一种类型的损坏似乎是视频的特定帧,无法读入。我为此添加了一个try-catch块,它运行良好。
另一种类型的损害是,根据VLC,"破损或丢失AVI索引"。当VideoReader尝试打开具有此类损坏的文件时,它会完全崩溃Matlab并出现错误,#34; MATLAB遇到内部问题并需要关闭。"并详细说明消息,"在4月3日检测到分段违规..."
所以我的问题是,有没有办法错误检查/跳过会导致此次崩溃的视频?
答案 0 :(得分:2)
您可以使用ffmpeg来检查视频文件的完整性。
请参阅:How can I check the integrity of a video file (avi, mpeg, mp4…)?
下载ffmpeg
的静态版本,并将ffmpeg.exe
放入您的工作目录中。
使用ffmpeg
命令在Matlab中执行system
,并检查返回状态
如果状态不为零,则视频文件已损坏
您还可以解析输出错误消息以获得更精细的逻辑。
以下是代码示例:
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