【问题标题】:How cap.get(cv2.CAP_PROP_POS_MSEC) works?cap.get(cv2.CAP_PROP_POS_MSEC) 是如何工作的?
【发布时间】:2022-01-28 00:17:00
【问题描述】:

我有一个包含此信息的视频:

fps = 29.971695558454563
number of frames = 26983
duration (S) = 900.2827333333333
duration (M:S) = 15:0.28273333333333994

我的问题是:为什么当我使用:

cap.set(cv2.CAP_PROP_POS_FRAMES, 30)

cap.get(cv2.CAP_PROP_POS_MSEC)

返回:

0.5

它不应该接近 1000 毫升吗?

cap = cv2.VideoCapture(video_path)
fps = cap.get(cv2.CAP_PROP_FPS)
cap.set(cv2.CAP_PROP_POS_FRAMES, 30)
print('FPS VIDEO',fps)
print('Mils',cap.get(cv2.CAP_PROP_POS_MSEC))
timestamp = get_hms(cap.get(cv2.CAP_PROP_POS_MSEC))


FPS VIDEO 29.971695558454563
Mils 0.5
hora 0:00:00.000500

def get_hms(millis):
    hms = timedelta(milliseconds=millis)
    print('hora',hms)
    return hms

【问题讨论】:

  • seeking 通常在 OpenCV 中被破坏,并且通常很难处理任意文件,除非您愿意先分析整个文件。不要依赖它。它可能适用于某些文件,但不适用于其他文件。

标签: python opencv


【解决方案1】:

这只是一个错误:

https://github.com/opencv/opencv/issues/15749

如果你使用它就会起作用:

ret, frame = cap.read()

通话前:

print('Mils',cap.get(cv2.CAP_PROP_POS_MSEC))

【讨论】:

  • 不要认为这是一个错误。对于一些试图读取下一个(但未知)帧的时间戳的来源来说没有多大意义,因为只有在帧出现后才能知道时间。
猜你喜欢
  • 2017-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-25
  • 1970-01-01
  • 2017-07-16
  • 1970-01-01
  • 2023-03-12
相关资源
最近更新 更多