首页 > 解决方案 > OpenCV 读取 MP4 给出所有零帧

问题描述

我一直在尝试使用 python-opencv 逐帧读取这个 mp4 文件。以下是我的代码。

import cv2
filename = '<absolute path>/HandWash_014_A_11_G_03.mp4'

cap = cv2.VideoCapture(filename)

while(cap.isOpened()):
    ret, frame = cap.read()
    print(frame, ret)
    if ret:
        cv2.imshow("frame", frame)
        cv2.waitKey(1)
    else:
        break

cap.release()
cv2.destroyAllWindows()

当我在阅读后立即打印框架时,我得到所有零数组,如下所示。然后我尝试在同一文件夹中读取不同的 mp4 文件,但成功返回非零值。另外,请注意这个有问题的文件可以使用媒体播放器成功播放(我尝试过 Quicktime 播放器)。

    [[[0 0 0]
  [0 0 0]
  [0 0 0]
  ...
  [0 0 0]
  [0 0 0]
  [0 0 0]]

 [[0 0 0]
  [0 0 0]
  [0 0 0]
  ...
  [0 0 0]
  [0 0 0]
  [0 0 0]]

 [[0 0 0]
  [0 0 0]
  [0 0 0]
  ...
  [0 0 0]
  [0 0 0]
  [0 0 0]]

 ...

 [[0 0 0]
  [0 0 0]
  [0 0 0]
  ...
  [0 0 0]
  [0 0 0]
  [0 0 0]]

 [[0 0 0]
  [0 0 0]
  [0 0 0]
  ...
  [0 0 0]
  [0 0 0]
  [0 0 0]]

 [[0 0 0]
  [0 0 0]
  [0 0 0]
  ...
  [0 0 0]
  [0 0 0]
  [0 0 0]]]

我实际上是在尝试逐帧从这个 Kaggle 数据集中读取文件 https://www.kaggle.com/realtimear/hand-wash-dataset

请帮助我理解这里的问题。任何帮助是极大的赞赏。

标签: pythonopencvmp4

解决方案


有时视频文件已损坏或与 opencv 不兼容。视频播放器可以读取它,因为它旨在尝试补偿那些有问题的文件。最好的方法是使用手刹或类似方法重新编码视频。通常可以为我解决问题


推荐阅读