【问题标题】:How to retrieve FFMPEG (called from OpenCV) Python decoding error如何检索 FFMPEG(从 OpenCV 调用)Python 解码错误
【发布时间】:2020-02-23 02:57:51
【问题描述】:

尝试从 IP 摄像机读取视频流时,使用:

stream = cv2.VideoCapture(src)
(grabbed, frame) = stream.read()

grabbed 返回 True,但有时帧已损坏(可能是由于 CPU 负载过高)。终端上显示如下内部 Opencv 错误:

[h264 @ 0x25e99400] error while decoding MB 87 29, bytestream -5

有没有办法捕捉到这个错误?请注意,我尝试了明显的try:exceptcv2.error 等。在这种帧损坏的情况下,最好重新启动与相机的连接。

【问题讨论】:

  • 不是 OpenCV 错误,那是 ffmpeg error log message... 所以没有什么可以捕捉到的。
  • 谢谢,有没有办法从 Python API 捕获这个 ffmpeg 错误?
  • 相信您可以使用isOpened() 来检查相机是否损坏。它允许您跳过损坏的视频并继续下一个,但仍会打印错误消息。 if stream.isOpened(): 然后尝试读取帧
  • 嗨@nathancy,感谢您的评论。不幸的是,isOpened() 不是一个好的选择,因为 RTSP 流已经初始化并且它总是会返回 True。该问题是由于处理期间的高 CPU 负载而不是在初始化时发生的。

标签: python opencv ffmpeg h.264


【解决方案1】:

可以使用wurlitzer从 Python 检索任何 cpp 输出/错误

from wurlitzer import pipes
with pipes() as (out, err):
   <any call to cpp code>

c_error = err.read()

【讨论】:

  • 您是否找出导致“解码 MB 时出错”错误的原因?
  • 如果您使用 UDP 协议并且您与相机的网络连接速度很慢,就会发生这种情况。
猜你喜欢
  • 2013-10-18
  • 2013-10-05
  • 1970-01-01
  • 2011-07-01
  • 2015-06-07
  • 2013-11-24
  • 1970-01-01
  • 2015-08-11
  • 1970-01-01
相关资源
最近更新 更多