Эта строка while True:
не совсем идеальна для того, что вы пытаетесь сделать. Я бы порекомендовал вам определить функцию для записи и сделать так, чтобы она рекурсивно вызывала себя, если пользователь прекращает запись с помощью клавиши пробела. Верх вашего скрипта по-прежнему будет запускаться так же:
import cv2
import numpy as np
capture = cv2.VideoCapture(1)
codec = cv2.VideoWriter_fourcc(*'XVID')
output = cv2.VideoWriter('CAPTURE.avi', codec, 30, (640, 480))
Затем вы определите свою функцию, она начинается с ожидания (навсегда) нажатия клавиши. После нажатия клавиши, если это escape (27), он выходит из функции и очищается, если это пробел (32), он устанавливает логический флаг, который начинает запись (пока l oop). Если не нажимаются ни escape, ни пробел, он вызывает себя и запускает процесс заново. Внутри while l oop он проверяет, нажата ли клавиша, если да, то проверяет, является ли это escape (27) или пробел (32). Если он ударил, он либо выйдет из функции (escape), либо вызовет запись, вызвав себя, что запустит процесс заново (пробел).
def wait_then_capture():
key = cv2.waitKey(0)
if key%256 == 27:
return
elif key%256 == 32:
record = True
else:
wait_then_capture()
while record == True:
ret, frame_temp = capture.read()
cv2.imshow('FRAME', frame_temp)
key = cv2.waitKey(1)
if key%256 == 27:
return
elif key%256 == 32:
break
output.write(frame)
wait_then_capture()
Затем мы вызываем нашу новую функцию и заканчиваем скрипт с та же очистка, что у вас уже есть
wait_then_capture()
capture.release()
output.release()
cv2.destroyAllWindows()
Ваш готовый сценарий будет выглядеть так
import cv2
import numpy as np
capture = cv2.VideoCapture(1)
codec = cv2.VideoWriter_fourcc(*'XVID')
output = cv2.VideoWriter('CAPTURE.avi', codec, 30, (640, 480))
def wait_then_capture():
key = cv2.waitKey(0)
if key%256 == 27:
return
elif key%256 == 32:
record = True
else:
wait_then_capture()
while record == True:
ret, frame_temp = capture.read()
cv2.imshow('FRAME', frame_temp)
key = cv2.waitKey(1)
if key%256 == 27:
return
elif key%256 == 32:
break
output.write(frame)
wait_then_capture()
wait_then_capture()
capture.release()
output.release()
cv2.destroyAllWindows()