En este artículo vamos a ver cómo podemos grabar nuestra pantalla usando Python. Antes de entrar en él, primero se debe entender qué es realmente un video. Básicamente, un video no es más que una secuencia de imágenes (llamadas cuadros) que se muestran a una frecuencia determinada.

Entonces, una solución para hacer una grabadora de pantalla sería capturar cada fotograma de la pantalla y escribirlo como un archivo de video. Para hacer esto, Python puede ser apalancado con bibliotecas útiles. Para la grabación de pantalla usaremos OpenCV, PyAutoGUI y Numpy.

Pre requisitos

Asegúrese de tener instaladas todas las bibliotecas necesarias mencionadas anteriormente.

openCV


pip install opencv-python

PyAutoGui


pip install pyautogui

Numpy


pip install numpy

El primer paso es importar todos los módulos necesarios.


import cv2 # OpenCV
import pyautogui
import numpy as np

El siguiente paso es especificar el códec de video usando fourCC. Es un código de 4 bytes que se utiliza para especificar el códec de vídeo. En aras de la simplicidad, podemos pasar el código FourCC para el formato de video AVI que es * “XVID”


codec = cv2.VideoWriter_fourcc(*"XVID")

En el siguiente paso, crearemos un objeto videoWriter.
El método de grabación de video del módulo cv2 necesita 4 argumentos obligatorios.


Primero es el nombre del archivo, segundo es el códec, tercero es el FPS (fotograma por segundo) y el último es la resolución del video (o pantalla). Para una mejor grabación de pantalla, 60 FPS es una buena velocidad de fotogramas. Puede experimentar con el valor de FPS para obtener resultados óptimos.


out = cv2.VideoWriter("Grabacion.avi", codec , 60, (1366, 768)) 

El siguiente paso es crear implícitamente una ventana usando el método namedWindow() con el indicador WINDOW_NORMAL para que el usuario pueda cambiar el tamaño de la ventana dependiendo de la necesidad.


cv2.namedWindow("Grabando", cv2.WINDOW_NORMAL)
cv2.resizeWindow("Grabando", 480, 270) #Los ultimos dos argunmentos son las dimensiones de la ventana de grabación

Ahora necesitamos capturar una captura de pantalla de cada fotograma de la pantalla, escribirlo en el archivo de video y mostrar la pantalla que se está grabando.


Aquí está el fragmento de código:


while True:
    img = pyautogui.screenshot() # tomamos un pantallazo
    frame = np.array(img) # convertimos la imagen a un arreglo de numeros
    frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) # Convertimos la imagen BGR a RGB
    out.write(frame) # adjuntamos al archivo de video
    cv2.imshow('Grabando', frame) # mostramos el cuadro que acabamos de grabar
    if cv2.waitKey(1) == ord('q'): # si el usuario presiona q paramos de grabar.
        break

out.release() # cerrar el archivo de video
cv2.destroyAllWindows() # cerrar la ventana

Tenga en cuenta que la captura de pantalla capturada está en formato BGR, pero para escribir el fotograma en el archivo de video necesitamos convertirlo a formato RGB usando el método cvt.Color() con el indicador COLOR_BGR2RBG. La condición if cv2.waitKey (1) == ord ('q') espera que el usuario presione la tecla ‘q’ para salir de la grabación. Por último, cerramos el archivo de video y destruimos la ventana de grabación con los métodos release() y destroyAllWindows() respectivamente.

¡Has terminado!
Es hora de probar los resultados.

Categorized in: