How to Make a Screen Recorder in Python

Abdou Rockikz · 10 sep 2019

Abdou Rockikz · 3 min read · Updated oct 2019 · General Python Topics

Screen recording enables you to create demonstration videos, record gaming achievements and create videos that can be shared online on social media, many industrial softwares exists out there that can help you do that very easily though. In this tutorial, you will learn how to make your own simple screen recorder in Python that you can extend on your own needs.

Let's get started, first, install the required dependencies for this tutorial:

pip3 install numpy opencv-python pyautogui

The process is as follows:

  • Capture a screenshot using pyautogui.
  • Convert that screenshot to a numpy array.
  • Write that numpy array to a file with the proper format using a video writer in OpenCV.

Importing necessary modules:

import cv2
import numpy as np
from time import perf_counter
import pyautogui

Let's initialize the format we gonna use to write our video file ( named "output.avi" ):

# display screen resolution, get it from your OS settings
SCREEN_SIZE = (1920, 1080)
# define the codec
fourcc = cv2.VideoWriter_fourcc(*"XVID")
# create the video write object
out = cv2.VideoWriter("output.avi", fourcc, 20.0, (SCREEN_SIZE))

Note: You need to get the correct SCREEN_SIZE from your operating system, that is the screen resolution, otherwise writing to the file won't work.

The 20.0 float value passed as third parameter to cv2.VideoWriter corresponds to the FPS ( Frame Per Second ).

Now we need to keep capturing screenshots and writing to the file in a loop until the user clicks the "q" button, here is the main loop for that:

while True:
    # make a screenshot
    img = pyautogui.screenshot()
    # convert these pixels to a proper numpy array to work with OpenCV
    frame = np.array(img)
    # convert colors from BGR to RGB
    frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
    # write the frame
    out.write(frame)
    # show the frame
    cv2.imshow("screenshot", frame)
    # if the user clicks q, it exits
    if cv2.waitKey(1) == ord("q"):
        break

# make sure everything is closed when exited
cv2.destroyAllWindows()
out.release()

After converting the screenshot to a numpy array, I need to mention that you need to convert that frame into RGB, that's because OpenCV uses BGR by default.

After you are done with recording, just click "q", it will destroy the window and finish writing to the file, try it out!

There are endless of ideas you can use to extend this small recipe, for example you can create keyboard shortcuts that starts, pauses and stops recording. This tutorial may help you: How to Control your Keyboard in Python.

Happy Coding ♥

View Full Code
Sharing is caring!


Read Also





Comment panel

   
Comment system is still in Beta, if you find any bug, please consider contacting us here.