Остановить видео на время воспроизведения - PullRequest
0 голосов
/ 10 января 2020

Я создал программу для извлечения видео в кадры. Мне нужно предложить остановить cv2.imshow () после того, как больше нет кадров для отображения.

количество видеокадров = 88

fps = 10.0

duration = 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' нет атрибута 'release'

1 Ответ

1 голос
/ 10 января 2020

reading_video() не использует return, поэтому возвращает None, и у вас есть

instance_variable = None

и более поздних версий

None.release()

Внутри reading_video(), которые вы должны использовать

return read_input

или, может быть, даже напрямую

read_input.release() 

без instance_variable.release()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...