首页 > 解决方案 > 按播放时间停止视频

问题描述

我创建了一个程序来将视频提取到帧中。我需要建议在没有更多帧显示后停止 cv2.imshow()。

视频帧数 = 88

fps = 10.0

持续时间= int(8)


    def reading_video():
        read_input = cv2.VideoCapture(r"D:\data\input.mp4")
        frame_rate = int(read_input.get(cv2.CAP_PROP_FRAME_COUNT)) # 88
        print("total number of frames is ", frame_rate)
        fps = read_input.get(cv2.CAP_PROP_FPS) #10.0
        duration = int((frame_rate/fps) %60)# 8
        print(duration) # 8.0

        initial_frame = 0
        while read_input.isOpened():
            ret, frame = read_input.read()
            if ret == True:
                cv2.imshow('video_frame', frame)
                write_path = r"D:\data\frame_output"
                write_name = 'frame0' + str(initial_frame) + '.jpg'
                cv2.imwrite(os.path.join(write_path, write_name), frame)
                initial_frame += 1
                if cv2.waitKey(0) & 0xFF == ord('c'):
                    break
            else:
                break


    instance_variable = reading_video()
    instance_variable.release()
    cv2.destroyAllWindows()

如果 waitkey(int(duration)) 则播放,并且在无帧后我确实收到 cv2 断言错误。

如果 waitkey(0) 那么我得到 AttributeError: 'NoneType' object has no attribute 'release'

标签: pythonopencv

解决方案


reading_video()不使用return所以它返回None并且你有

instance_variable = None

然后

None.release()

在里面reading_video()你应该使用

return read_input

或者甚至直接

read_input.release() 

没有instance_variable.release()


推荐阅读