Запись экрана позволяет создавать демонстрационные видеоролики, записывать игровые достижения и создавать видеоролики, которые можно публиковать в Интернете в социальных сетях. Однако существует множество промышленных программ, которые могут помочь вам в этом очень легко. В этом руководстве вы узнаете, как создать свой собственный простой экранный рекордер на Python, который вы можете расширить для своих нужд.

Давайте начнем, сначала установим необходимые зависимости для этого урока:

pip3 install numpy opencv-python pyautogui

Процесс выглядит следующим образом:

  • Сделайте снимок экрана с помощью pyautogui.
  • Преобразуйте этот снимок экрана в массив numpy.
  • Запишите этот массив numpy в файл с правильным форматом с помощью средства записи видео в OpenCV.

Импортируем необходимые модули:

import cv2
import numpy as np
import pyautogui

Давайте инициализируем формат, который мы будем использовать для записи нашего видеофайла (с именем «output.avi»):

# разрешение экрана дисплея, получите его в настройках вашей ОС
SCREEN_SIZE = (1920, 1080)
# определяем кодек
fourcc = cv2.VideoWriter_fourcc(*"XVID")
# создаем объект записи видео
out = cv2.VideoWriter("output.avi", fourcc, 20.0, (SCREEN_SIZE))

Примечание: необходимо получить правильный SCREEN_SIZE из вашей операционной системы, то есть разрешение экрана, иначе запись в файл не будет работать (в качестве альтернативы вы можете использовать функцию pyautogui.size(), чтобы получить размер основного монитора).

fourcc — это библиотека видеокодеков, которую OpenCV будет использовать для записи видеофайла, здесь мы указали XVID. Значение с плавающей запятой 20.0, переданное в качестве третьего параметра в cv2.VideoWriter, соответствует FPS (кадрам в секунду).

Теперь нам нужно продолжать делать снимки экрана и записывать в файл в цикле, пока пользователь не нажмет кнопку q, вот основной цикл для этого:

while True:
    # сделать скриншот
    img = pyautogui.screenshot()
    # преобразовываем эти пиксели в правильный массив numpy для работы с OpenCV
    frame = np.array(img)
    # конвертировать цвета из BGR в RGB
    frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
    # пишем фрейм
    out.write(frame)
    # показать рамку
    cv2.imshow("screenshot", frame)
    # если пользователь нажимает q, он выходит
    if cv2.waitKey(1) == ord("q"):
        break

# убедитесь, что все закрыто при выходе
cv2.destroyAllWindows()
out.release()

Сначала мы используем функцию screenshot(), которая возвращает объект изображения, поэтому нам нужно преобразовать его в правильный массив numpy. После этого нам нужно преобразовать этот кадр в RGB, потому что OpenCV по умолчанию использует BGR.

Как упоминалось в официальной документации pyautogui, вы также можете записывать только области экрана, путем передачи аргумента ключевого слова региона, который представляет собой кортеж из четырех целых чисел, представляющий верхнюю, левую, ширину и высоту области для захвата, вот как это делается:

img = pyautogui.screenshot(region=(0, 0, 300, 400))

После того, как вы закончите запись, просто нажмите q, это разрушит окно и завершит запись в файл, попробуйте!

Кроме того, вы можете заменить оператор while True циклом for следующим образом:

for i in range(200):
    # сделать скриншот
    img = pyautogui.screenshot()
    # остальной код ...

С помощью этого кода ваш экран будет записываться в течение 10 секунд, потому что мы установили FPS на 20 (что имеет смысл, потому что 200 равно 20 умножить на 10).

Хорошо, есть бесконечное количество идей, которые можно использовать для расширения этого. Например, вы можете объединить это с аудиорекордером, и вы получите инструмент Python, который одновременно записывает ваш экран и голос, нужно будет использовать поток, который записывает звук, а другой — для средства записи экрана, сообщите нам о своем прогрессе в комментариях ниже!

Или вы можете создать сочетания клавиш, которые запускают, приостанавливают и останавливают запись, это руководство может вам помочь.

По мотивам How to Make a Screen Recorder in Python

Опубликовано Вадим В. Костерин

ст. преп. кафедры ЦЭиИТ. Автор более 130 научных и учебно-методических работ. Лауреат ВДНХ (серебряная медаль).

Оставьте комментарий

Ваш адрес email не будет опубликован.