我怎样才能用opencv或其他软件获得一帧的时间?

t8e9dugd  于 2023-01-17  发布在  其他
关注(0)|答案(1)|浏览(162)

我需要处理视频并记录一些事件,为了做到这一点,我迭代所有帧并获得信息,但我需要知道该帧出现在视频中的第二个帧。
目前,我使用OpenCV的方式如下:

cap = cv2.VideoCapture(path_str)

    while cap.isOpened():
        _, frame = cap.read()

        if frame is None:
            break

        data = self.get_data()
        store(data, second_of_the_video)

        if cv2.waitKey(25) & 0xFF == ord("q"):
            break

    cap.release()

问题是,我不确定如何获得我可以获得帧的second_of_the_video,但我不确定如何在视频持续时间内"同步"帧。
你知道我该怎么做吗?
谢谢。

ddarikpa

ddarikpa1#

可以使用VideoCapture类的get(propId)方法获取视频的当前位置(以毫秒为单位),然后将该位置除以1000,即可计算出当前的秒数。
下面是一个如何在代码中获取视频当前秒数的示例:

cap = cv2.VideoCapture(path_str)

while cap.isOpened():
    _, frame = cap.read()

    if frame is None:
        break

    data = self.get_data()
    position = cap.get(cv2.CAP_PROP_POS_MSEC)
    second_of_the_video = position / 1000
    store(data, second_of_the_video)

    if cv2.waitKey(25) & 0xFF == ord("q"):
        break

cap.release()

请注意,视频的帧速率可能不是恒定的,因此帧之间的时间可能不是精确的25毫秒,因此应该使用CAP_PROP_POS_MSEC来获取当前位置,而不是仅将变量递增25。

相关问题