Python检查损坏的视频文件(捕获OpenCV错误)

2024-09-27 17:50:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在寻找一种方法来检查视频文件是否损坏。在

我用cv2(opencvforpython)来加载视频。 如果视频文件已损坏,我想跳过该文件并转到下一个。在

我发现了这个stackoverflow question,因此尝试了这个:

try:
    vid = cv2.VideoCapture(corrupt_video_file)
except cv2.error as e:
    print(e)
except:
    print('error')

但我仍然收到以下错误:

^{pr2}$

似乎引发了cpp错误,而不是python错误。(我从源代码处编译了opencv,这是另一个项目需要的)

也可以捕捉这些错误吗?
或者在python中有没有其他方法来检查损坏的视频文件?
或者问题在于我自己编译了openCV,而不仅仅是安装了python-cv2?在

欢迎任何帮助或建议!在


Tags: 文件方法视频错误errorstackoverflowcv2视频文件
1条回答
网友
1楼 · 发布于 2024-09-27 17:50:02

Or does the problem lie with that I compiled openCV myself, and not just installed the python-cv2?

测试应该很简单:只需使用release version运行脚本。在

Is it possible to also catch those cpp errors?

由于您能够自己编译OpenCV,所以您可能有机会找出一个#define来控制错误行为。我有一个快速的浏览,但这是一个相当涉及“新手”,所以我只能给一些链接到文档和源代码,你可以开始你的搜索:

cap_gstreamer.cpp#L890调用包装^{}的宏^{}source)。在

甚至可能有库使用的环境变量或标志可以实现抑制这些错误(无需重新编译)。在

但是既然你已经在编译了,当然你可以尝试“黑客”源代码来忽略错误。在

您可能可以在http://answers.opencv.org/questions/找到实际帮助,甚至可以从开发人员那里获得帮助。在


对不起,我看错问题了。我通过pip3.exe install opencv-pythonsee PyPi)安装了OpenCV,官方下载只是提供了一个zip文件,没有明显的Python使用说明。在

简单地测试^{}似乎可以工作:

#!python3
"""https://stackoverflow.com/a/49751695/1619432"""
import sys
import cv2  # https://pypi.python.org/pypi/opencv-python

filename = "big_buck_bunny.mp4"

# info
print("Python:", sys.version)
print("CV2:   ", cv2.__version__)
print(filename)

# create empty file
if False:
    with open(filename, "wb") as f:
        pass

# produce error
try:
    vid = cv2.VideoCapture(filename)
    if not vid.isOpened():
        raise NameError('Just a Dummy Exception, write your own')
except cv2.error as e:
    print("cv2.error:", e)
except Exception as e:
    print("Exception:", e)
else:
    print("no problem reported")

print("done")

文件不存在:

^{pr2}$

零字节文件:

Python: 3.6.5 (v3.6.5:f59c0932b4, Mar 28 2018, 17:00:18) [MSC v.1900 64 bit (AMD64)]
CV2:    3.4.0
does_exist.mp4
[mov,mp4,m4a,3gp,3g2,mj2 @ 000000a171d82880] moov atom not found
warning: Error opening file (/build/opencv/modules/videoio/src/cap_ffmpeg_impl.hpp:808)
warning: does_exist.mp4 (/build/opencv/modules/videoio/src/cap_ffmpeg_impl.hpp:809)
Exception: Just a Dummy Exception, write your own
done

有效文件

Python: 3.6.5 (v3.6.5:f59c0932b4, Mar 28 2018, 17:00:18) [MSC v.1900 64 bit (AMD64)]
CV2:    3.4.0
big_buck_bunny.mp4
no problem reported
done

请参阅关于Errors的Python教程,了解如何处理异常并编写自己的异常。在

为了抑制错误消息,check out可能会穿透上面的部分,或者它们可以被重定向(管道到任何地方)。在

Or is there an other way to check for corrupted video files in python?

您可以尝试找到一个外部程序,该程序有一个检查选项,但不实际播放该文件(可能是VLCffmpeg,…)并从Python运行并与其通信(例如subprocess)。在


Python的API文档:cv2.VideoCapture()

相关问题 更多 >

    热门问题