Что вызывает очень быстрое воспроизведение видео, написанного с помощью opencv? ⇐ Python
-
Гость
Что вызывает очень быстрое воспроизведение видео, написанного с помощью opencv?
Я пытаюсь сделать запись экрана, используя opencv и pyautogui в Python для определенного окна, и когда я сохраняю видео, а затем пытаюсь воспроизвести его, воспроизведение оказалось очень быстрым, чем обычно, как это исправить?
>
импортировать ОС импортировать cv2 импортировать окно pyget импортировать pyautogui импортная платформа импортировать numpy как np время импорта # Получаем нужное окно если платформа.система() == 'Windows': окно = pygetwindow.getWindowsWithTitle('морской бой')[0] окно.активировать() влево, вверху = окно.слева, окно.верх справа, внизу = окно.справа, окно.снизу # Убедитесь, что захваченный регион соответствует желаемой области # Вы можете настроить эти значения, чтобы захватить большую или меньшую область левое_смещение = 0 верхнее_смещение = 0 правое_смещение = 0 нижнее_смещение = 0 влево += левое_смещение сверху += top_offset вправо -= правильное_смещение дно -= нижнее_смещение # Указываем имя файла для видео имя файла = 'result3.avi' # Создаем полный путь к видеофайлу в текущем каталоге video_path = os.path.join(os.getcwd(), имя файла) # Установите частоту кадров (например, 20 кадров в секунду) частота кадров = 20 # Создайте объект записи видео fourcc = cv2.VideoWriter_fourcc(*'XVID') out = cv2.VideoWriter(video_path, Fourcc, Frame_rate, (справа - слева, снизу - сверху)) # Инициализируем переменные для количества кадров и таймера количество кадров = 0 start_time = время.время() # Основной цикл для захвата кадров пока правда: # Захват содержимого окна, даже если оно не в фокусе снимок экрана = pyautogui.screenshot(region=(слева, сверху, справа — слева, снизу — сверху)) кадр = np.array (скриншот) # Конвертируем кадр в формат BGR (формат OpenCV) рамка = cv2.cvtColor(frame, cv2.COLOR_RGB2BGR) # Записываем кадр в видеофайл out.write(кадр) # Увеличиваем количество кадров количество кадров += 1 # Подсчитать прошедшее время истекшее_время = время.время() - начальное_время # Рассчитаем желаемое время для следующего кадра next_frame_time = количество_кадров / частота_кадров # Рассчитайте время сна для достижения желаемой частоты кадров время_сна = время_следующего_кадра - истекшее_время если время сна > 0: time.sleep(время_сна) # Отображение захваченного кадра cv2.imshow('Захваченный кадр', кадр) # Сброс счетчика кадров и таймера, если прошла секунда если истекшее_время >= 1,0: количество кадров = 0 start_time = время.время() # Разрыв цикла, если нажата 'q' если cv2.waitKey(1) & 0xFF == ord('q'): перерыв # Отпустите программу записи видео и закройте окно OpenCV. out.release() cv2.destroyAllWindows() # Распечатываем частоту кадров print(f'Частота кадров: {frame_rate} FPS') Я попробовал приведенный выше код и ожидаю, что воспроизведение будет нормальным, но оно быстрее
Я пытаюсь сделать запись экрана, используя opencv и pyautogui в Python для определенного окна, и когда я сохраняю видео, а затем пытаюсь воспроизвести его, воспроизведение оказалось очень быстрым, чем обычно, как это исправить?
>
импортировать ОС импортировать cv2 импортировать окно pyget импортировать pyautogui импортная платформа импортировать numpy как np время импорта # Получаем нужное окно если платформа.система() == 'Windows': окно = pygetwindow.getWindowsWithTitle('морской бой')[0] окно.активировать() влево, вверху = окно.слева, окно.верх справа, внизу = окно.справа, окно.снизу # Убедитесь, что захваченный регион соответствует желаемой области # Вы можете настроить эти значения, чтобы захватить большую или меньшую область левое_смещение = 0 верхнее_смещение = 0 правое_смещение = 0 нижнее_смещение = 0 влево += левое_смещение сверху += top_offset вправо -= правильное_смещение дно -= нижнее_смещение # Указываем имя файла для видео имя файла = 'result3.avi' # Создаем полный путь к видеофайлу в текущем каталоге video_path = os.path.join(os.getcwd(), имя файла) # Установите частоту кадров (например, 20 кадров в секунду) частота кадров = 20 # Создайте объект записи видео fourcc = cv2.VideoWriter_fourcc(*'XVID') out = cv2.VideoWriter(video_path, Fourcc, Frame_rate, (справа - слева, снизу - сверху)) # Инициализируем переменные для количества кадров и таймера количество кадров = 0 start_time = время.время() # Основной цикл для захвата кадров пока правда: # Захват содержимого окна, даже если оно не в фокусе снимок экрана = pyautogui.screenshot(region=(слева, сверху, справа — слева, снизу — сверху)) кадр = np.array (скриншот) # Конвертируем кадр в формат BGR (формат OpenCV) рамка = cv2.cvtColor(frame, cv2.COLOR_RGB2BGR) # Записываем кадр в видеофайл out.write(кадр) # Увеличиваем количество кадров количество кадров += 1 # Подсчитать прошедшее время истекшее_время = время.время() - начальное_время # Рассчитаем желаемое время для следующего кадра next_frame_time = количество_кадров / частота_кадров # Рассчитайте время сна для достижения желаемой частоты кадров время_сна = время_следующего_кадра - истекшее_время если время сна > 0: time.sleep(время_сна) # Отображение захваченного кадра cv2.imshow('Захваченный кадр', кадр) # Сброс счетчика кадров и таймера, если прошла секунда если истекшее_время >= 1,0: количество кадров = 0 start_time = время.время() # Разрыв цикла, если нажата 'q' если cv2.waitKey(1) & 0xFF == ord('q'): перерыв # Отпустите программу записи видео и закройте окно OpenCV. out.release() cv2.destroyAllWindows() # Распечатываем частоту кадров print(f'Частота кадров: {frame_rate} FPS') Я попробовал приведенный выше код и ожидаю, что воспроизведение будет нормальным, но оно быстрее