How to Make a Screen Recorder in Python?

By | November 14, 2021
How to Make a Screen Recorder in Python

There are many screen recording applications for different operating systems. With the help of these screen recording applications, we can record the screen while we are playing a video game, writing some code, researching about something on the internet, and so on. In this Python tutorial, we will discuss how to make a screen recorder in Python.

Although Windows and macOS now come with a built-in screen recorder application, it would be cool if you knew how to build a screen recorder of your own using Python. But before we dive into the Python implementation of the screen recorder, let’s install the libraries we will be using in this tutorial.

Installing Libraries

1) The pyautogui Library

pyautogui is a Python open-source third-party API that is used to control the mouse, keyboard, and other automated interactions. In this tutorial, we will be using this API to take screenshots and then using other libraries to chain those screen shows and create a screen recorder. To install pyautogui for your Python environment, run the following pip install command:

pip install pyautogui

2) The opencv-python Library

OpenCV is a Python computer vision library that is used to handle images and video files. In this tutorial, we will be using this library to write video data. As a video is a collection of images, so here we will use the OpenCV library to write all the screenshots captured by the pyautogui API. Use the following pip command to install the OpenCV library:

pip install opencv-python

3) The numpy Library

NumPy is very popular among Python developers for its numerical computation and NumPy arrays. When you install opencv-python, it will automatically install numpy. To install the numpy library, use the following pip install command:

pip install numpy

Now that we are all set with installing all the required libraries, let’s write the Python code.

How to Make a Screen Recorder in Python?

Let’s start with importing the required modules.

Vamware
import cv2 as cv
import pyautogui
import numpy as np

Now, let’s get the screen size of our display using the pyautogui.size() function.

#(width,height)
screen_size=pyautogui.size()

Next, we need to initialize the VideoWriter() object that will write the video frames.

Vamware
#initialize the object
video = cv.VideoWriter('Recording.avi', 
                        cv.VideoWriter_fourcc(*'MJPG'), 
                        20, 
                        screen_size)
  • Recording.avi is the file name of the video that we will be recording.
  • cv.VideoWriter_fourcc(*'MJPG') will set the four-character code that compresses the frames.
  • 20 is the framerate of videostream.
  • screen_size is the height and width of the video frame.

Now, we need to create a loop that will capture the screenshot of the display and write those images in the video object.

print("Recording.....")
while True:
    #take screenshot
    screen_shot_img = pyautogui.screenshot()

    #convert into array
    frame = np.array(screen_shot_img)

    #change from BGR to RGB
    frame = cv.cvtColor(frame, cv.COLOR_BGR2RGB)

    #write frame
    video.write(frame)

    #display the live recording 
    cv.imshow("Recording Frame(Minimize it)", frame)    
    if cv.waitKey(1) == ord("q"):
        break

cv.destroyAllWindows()
video.release()
  • The screenshot() function will capture the screen.
  • array(screen_shot_img) will convert the screen_shot_image into a numpy array because OpenCV is supposed to work with numpy arrays.
  • cvtColor() will change the color format of the image from BGR to RGB because OpenCV, by default, writes images in BRG format, so that it’s important to convert them into RGB.
  • The write(frame) function will write the frame into the video object.
  • imshow() will display a live video recording. For better performance, you can minimize the recording frame window.
  • To close the screen recording, either press “q” on the live recording screen or kill the program by typing CTRL+Z.

Now put all the code together and execute.

Python Program to Make a Screen Recorder

import cv2 as cv
import pyautogui
import numpy as np

#(width,height)
screen_size=pyautogui.size()

#initialize the object
video = cv.VideoWriter('Recording.avi',  
                         cv.VideoWriter_fourcc(*'MJPG'), 
                         20, screen_size)

print("Recording.....")
while True:
    #click screen shot
    screen_shot_img = pyautogui.screenshot()

    #convert into array
    frame = np.array(screen_shot_img)

    #change from BGR to RGB
    frame = cv.cvtColor(frame, cv.COLOR_BGR2RGB)

    #write frame
    video.write(frame)

    #display the live recording 
    cv.imshow("Recording Frame(Minimize it)", frame)    
    if cv.waitKey(1) == ord("q"):
        break

cv.destroyAllWindows()
video.release()

Output

Recording.....

After successfully executing and recording the screen, you can check the directory where your Python script is located. There you will find the Recording.avi video of your screen recording.

Vamware

Conclusion

In this Python tutorial, we learned how we could code for a simple screen recorder in Python. To sum up the above program, we just create an infinite loop, and inside it, we keep capturing the screenshot and writing its data in the "recording.avi" file that makes a video.

Also, to handle all the complex algorithms and conversion, we used Python pyautogui, opencv-python, and numpy libraries. We hope you like the above article and if you have any queries related to the above program, please let us know by commenting down below.

People are also reading: 

Author: Vinay Singh

I am a Full Stack Developer with a Bachelor's Degree in Computer Science, who also loves to write technical articles that can help fellow developers.

Leave a Reply

Your email address will not be published.