Проверка Python на наличие поврежденного видеофайла (поймать ошибку OpenCV)

Я ищу способ проверить, не поврежден ли видеофайл.

Я использую cv2 (OpenCV для python) для загрузки видео. Если видеофайл поврежден, я хотел бы пропустить файл и перейти к следующему.

Я нашел этот вопрос stackoverflow и поэтому попробовал это:

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?

Любая помощь или предложения будут приветствоваться!


person MatthiasRoelandts    schedule 10.04.2018    source источник
comment
OpenCV имеет привычку повторять все сообщения об ошибках в stderr даже при перехвате исключений, а до недавнего времени в Python не было хорошего способа остановить это. GStreamer, вероятно, делает то же самое - я лично им не пользуюсь, но я помню, что могут быть некоторые флаги компиляции, чтобы изменить это поведение, посмотрите вокруг. Здесь трудно сказать, так как вы смешали оба потока и, перехватив исключение, просто распечатали его.   -  person Dan Mašek    schedule 10.04.2018


Ответы (1)


person    schedule
comment
У меня была такая же ошибка, и проверка isOpened позволила мне пропустить сломанное видео и перейти к следующему. Однако сообщение об ошибке все равно будет напечатано. - person Lemon; 02.07.2018