视频播放完毕后如何自动关闭OpenCV?

时间:2021-07-28 18:36:35

标签: python opencv

我需要帮助。我希望每当我的程序到达视频结尾时,我希望它自动关闭而不会永远循环。

我尝试了几种方法(使用 ret),但它们不起作用。除了我可能将它们写在错误的范围内之外,我不知道为什么它总是出错。

我还需要记录从打开视频到关闭视频所经过的时间差(使用 time.time())。但是,每当我强制关闭 OpenCV 窗口时,我在下面编写的这段代码并没有打印出时间差。

这是我的代码的粗略结构(不是完整代码,我只展示重要的):

import stuff

cap = cv2.VideoCapture('file.mp4')

def main():
    start = time.time()
    
    out = cv2.VideoWriter('newvid.mp4')

    while True:
        #Stuff I do on the video in each frame
        video = cap.copy()

        cv2.imshow('video', video)
        out.write(video)

        if cv2.waitKey(33) == 27:
            break

    end = time.time()
    print(end - start)

    cv2.destroyAllWindows()

if __name__ = '__main__':
    main()

谁能帮我告诉我解决办法吗?

1 个答案:

答案 0 :(得分:0)

#import stuff
import cv2
import time
cap = cv2.VideoCapture('file1.mp4')


def main():
    start = time.time()

    fourcc = cv2.VideoWriter_fourcc(*'MP4V')
    fps = cap.get(cv2.CAP_PROP_FPS)
    size = (int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)), int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)))
    out = cv2.VideoWriter('newvid.mp4', fourcc, fps, size)

    while True:
        # Stuff I do on the video in each frame
        ret, video = cap.read()

        if ret is False:
            break
        cv2.imshow('video', video)
        out.write(video)

        if cv2.waitKey(33) == 27:
            break

    end = time.time()
    print(end - start)
    cap.release()
    out.release()
    cv2.destroyAllWindows()


if __name__ == '__main__':
    main()
相关问题