Welcome folks today in this blog post we will be building a screen
recorder in tkinter framework and save the video as mp4
file using opencv
and pyautogui
library. All the full source code of the application is shown below.
Get Started
In order to get started you need to install the below libraries using the pip
command as shown below
pip install opencv-python
pip install pyautogui
pip install numpy
pip install uuid
After that you need to make an app.py
file and copy paste the following code
app.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
import tkinter as tk from tkinter import filedialog import cv2 import pyautogui import numpy as np import datetime import uuid class ScreenRecorderGUI: def __init__(self, master): self.master = master master.title("Screen Recorder") self.output_path = "" # Create the GUI elements self.label = tk.Label(master, text="Select destination folder:") self.label.pack() self.destination_button = tk.Button(master, text="Select Folder", command=self.select_destination) self.destination_button.pack() self.record_button = tk.Button(master, text="Record", command=self.start_recording) self.record_button.pack() self.stop_button = tk.Button(master, text="Stop", command=self.stop_recording, state=tk.DISABLED) self.stop_button.pack() def select_destination(self): self.output_path = filedialog.askdirectory() def start_recording(self): # Generate a unique filename unique_id = str(uuid.uuid4()) current_datetime = datetime.datetime.now() filename = f"{current_datetime.strftime('%Y%m%d%H%M%S')}_{unique_id}.mp4" # Start recording the screen frames screen_width, screen_height = pyautogui.size() self.out = cv2.VideoWriter(self.output_path + "/" + filename, cv2.VideoWriter_fourcc(*"mp4v"), 25.0, (screen_width, screen_height)) self.record_button.config(state=tk.DISABLED) self.stop_button.config(state=tk.NORMAL) self.record() def record(self): # Record frames until stop button is pressed frame = pyautogui.screenshot() frame = np.array(frame) frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) self.out.write(frame) self.master.after(1, self.record) def stop_recording(self): # Stop recording self.out.release() self.record_button.config(state=tk.NORMAL) self.stop_button.config(state=tk.DISABLED) if __name__ == '__main__': root = tk.Tk() app = ScreenRecorderGUI(root) root.mainloop() |
As you can see we are importing all the required libraries at the top including opencv
and pyautogui
. And after that we have written the python class of ScreenRecorder
in which we have declared all the methods to record
the screen and stop the recording and also select the output
directory where all the files will be stored. And lastly we are creating a new object
of that class and starting the application.