Подробнее:
Проблема с продолжительностью:
Я установил продолжительность захвата видео на 40 секунд, но общее время, необходимое для выполнения сценария, взято из сообщения журнала logging.info(f «Захват видео в {video_path}») до logging.info(f «Завершен захват видео в {video_path}») — каждый раз составляет примерно 1 минуту 40 секунд. Это намного дольше, чем ожидалось.
Проблема с качеством кадра:
В течение первых 10 секунд захваченного видео кадры выглядят хорошо, а видео работает плавно. Однако по истечении этого начального периода видео становится резким и пропускает кадры. Такое ухудшение качества влияет на удобство использования записанного видео.
Код: Выделить всё
def capture_video(cap, video_base_directory, timezone, frame_width, frame_height, fps = 20, duration=40):
os.makedirs(video_base_directory, exist_ok=True)
video_filename = f"video_capture_{datetime.now(timezone).strftime('%Y-%m-%d_%H-%M-%S')}.mp4"
video_path = os.path.join(video_base_directory, video_filename)
video_codec = cv2.VideoWriter_fourcc(*'mp4v')
video_output = cv2.VideoWriter(video_path, video_codec, fps, (frame_width, frame_height))
total_frames = int(fps * duration)
buffer_size = fps * duration * 0.5
frame_buffer = []
logging.info(f"Capturing video at {video_path}")
for _ in range(total_frames):
frame = cap.read()[1] # Directly read the frame
frame_buffer.append(frame)
if len(frame_buffer) >= buffer_size:
for buffered_frame in frame_buffer:
video_output.write(buffered_frame)
frame_buffer.clear()
logging.info(f"Finished Capturing video at {video_path}")
video_output.release()
return video_path, video_filename
Я экспериментировал с несколькими размерами буфера (20–400 кадров), а также прямая запись в видеофайл и отсутствие буфера. Проблема та же.
Подробнее здесь: https://stackoverflow.com/questions/790 ... -ip-camera