Python es un lenguaje de propósito general ampliamente utilizado. Permite realizar una variedad de tareas. Uno de ellos puede ser la grabación de un vídeo. Proporciona un módulo llamado pyautogui que se puede usar para lo mismo. Este módulo junto con NumPy y OpenCV proporciona la forma de manipular y guardar las imágenes (captura de pantalla en este caso)
Módulos necesarios
- Numpy: para instalar Numpy, escriba el siguiente comando en la terminal.
pip install numpy
- pyautogui: para instalar pyautogui, escriba el siguiente comando en la terminal.
pip install pyautogui
- OpenCV: para instalar OpenCV, escriba el siguiente comando en la terminal.
pip install opencv-python
A continuación se muestra la implementación.
Primero, importe todos los paquetes necesarios.
Python3
# importing the required packages import pyautogui import cv2 import numpy as np
Ahora, antes de grabar la pantalla, tenemos que crear un objeto VideoWriter. Además, debemos especificar el nombre del archivo de salida, el códec de video, FPS y la resolución de video. En el códec de video, tenemos que especificar un código de 4 bytes (como XVID, MJPG, X264, etc.). Usaremos XVID aquí.
Python3
# Specify resolution resolution = (1920, 1080) # Specify video codec codec = cv2.VideoWriter_fourcc(*"XVID") # Specify name of Output file filename = "Recording.avi" # Specify frames rate. We can choose # any value and experiment with it fps = 60.0 # Creating a VideoWriter object out = cv2.VideoWriter(filename, codec, fps, resolution)
Opcional: para mostrar la grabación en tiempo real, debemos crear una ventana vacía y cambiar su tamaño.
Python3
# Create an Empty window cv2.namedWindow("Live", cv2.WINDOW_NORMAL) # Resize this window cv2.resizeWindow("Live", 480, 270)
Ahora, comencemos a grabar nuestra pantalla. Ejecutaremos un ciclo infinito y en cada iteración del ciclo, tomaremos una captura de pantalla y la escribiremos en el archivo de salida con la ayuda del escritor de video.
Python3
while True: # Take screenshot using PyAutoGUI img = pyautogui.screenshot() # Convert the screenshot to a numpy array frame = np.array(img) # Convert it from BGR(Blue, Green, Red) to # RGB(Red, Green, Blue) frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) # Write it to the output file out.write(frame) # Optional: Display the recording screen cv2.imshow('Live', frame) # Stop recording when we press 'q' if cv2.waitKey(1) == ord('q'): break
Después de que todo esté hecho, liberaremos el escritor y destruiremos todas las ventanas abiertas por OpenCV.
Python3
# Release the Video writer out.release() # Destroy all windows cv2.destroyAllWindows()
Código completo:
Python3
# importing the required packages import pyautogui import cv2 import numpy as np # Specify resolution resolution = (1920, 1080) # Specify video codec codec = cv2.VideoWriter_fourcc(*"XVID") # Specify name of Output file filename = "Recording.avi" # Specify frames rate. We can choose any # value and experiment with it fps = 60.0 # Creating a VideoWriter object out = cv2.VideoWriter(filename, codec, fps, resolution) # Create an Empty window cv2.namedWindow("Live", cv2.WINDOW_NORMAL) # Resize this window cv2.resizeWindow("Live", 480, 270) while True: # Take screenshot using PyAutoGUI img = pyautogui.screenshot() # Convert the screenshot to a numpy array frame = np.array(img) # Convert it from BGR(Blue, Green, Red) to # RGB(Red, Green, Blue) frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) # Write it to the output file out.write(frame) # Optional: Display the recording screen cv2.imshow('Live', frame) # Stop recording when we press 'q' if cv2.waitKey(1) == ord('q'): break # Release the Video writer out.release() # Destroy all windows cv2.destroyAllWindows()
Producción: