【发布时间】:2018-09-19 21:35:32
【问题描述】:
我正在寻找一种方法来检查视频文件是否损坏。
我正在使用 cv2(Python 的 OpenCV)来加载视频。 如果视频文件损坏,我想跳过该文件并继续下一个。
我发现了这个stackoverflow question,因此尝试了这个:
try:
vid = cv2.VideoCapture(corrupt_video_file)
except cv2.error as e:
print(e)
except:
print('error')
但我仍然收到以下错误:
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x1b2d000] moov atom not found Unable to stop the stream: Inappropriate ioctl for device OpenCV Error: Unspecified error (GStreamer: unable to start pipeline ) in cvCaptureFromCAM_GStreamer, file /home/student/programs/opencv-3.4.0/modules/videoio/src/cap_gstreamer.cpp, line 890 VIDEOIO(cvCreateCapture_GStreamer (CV_CAP_GSTREAMER_FILE, filename)): raised OpenCV exception:
/home/student/programs/opencv-3.4.0/modules/videoio/src/cap_gstreamer.cpp:890: error: (-2) GStreamer: unable to start pipeline in function cvCaptureFromCAM_GStreamer
似乎引发了 cpp 错误,而不是 python 错误。 (我从源代码编译了opencv,其他项目需要)
是否也可以捕获这些 cpp 错误?
或者还有其他方法可以在 python 中检查损坏的视频文件吗?
还是问题出在我自己编译的openCV,而不仅仅是安装了python-cv2?
欢迎任何帮助或建议!
【问题讨论】:
-
OpenCV 有这种parroting all the error messages to stderr 的习惯,即使你捕获了异常,直到最近,在 Python 中还没有很好的方法来阻止它。 GStreamer 可能也在做同样的事情——我个人不使用它,但我记得可能有一些编译标志来改变这种行为,环顾四周。在这里很难说,因为您混合了两个流并且在捕获异常时您只需打印它。