Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
53 changes: 37 additions & 16 deletions screen_recorder.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
"""
Created on Mon Mar 9 17:57:18 2020
Edited on Sun Apr 6 01:25:44 2025

@author: vivek9patel (github)
"""
Expand All @@ -11,35 +11,56 @@
from tkinter.filedialog import asksaveasfilename
import time
import sys
from pynput import keyboard

# Global flag to control recording
recording = True

def on_press(key):
global recording
try:
if key.char == 'q':
recording = False
except AttributeError:
pass

def run():
global recording
# Start keyboard listener
listener = keyboard.Listener(on_press=on_press)
listener.start()

# display screen resolution, get it from your OS settings
SCREEN_SIZE = pyautogui.size()
# define the codec
fourcc = cv2.VideoWriter_fourcc(*"XVID")
# create the video write object
file_name = asksaveasfilename(confirmoverwrite=False,defaultextension='.avi')
file_name = asksaveasfilename(confirmoverwrite=False, defaultextension='.avi')
out = cv2.VideoWriter(file_name, fourcc, 20.0, (SCREEN_SIZE))
print("Recording Started...\n")
odd=1
while True:
odd+=1
print("Press 'q' to stop recording...\n")
odd = 1

while recording:
odd += 1
# 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)
if(odd==10):
if odd == 10:
cv2.imshow("Recording...", frame)
odd=1
# if the user clicks q, it exits
odd = 1
# Check for 'q' in OpenCV window (still works when window is focused)
if cv2.waitKey(1) == ord("q"):
cv2.destroyAllWindows()
break
recording = False
# write the frame
out.write(frame)

cv2.destroyAllWindows()
out.release()
listener.stop()
root.destroy()
sys.exit(0)

Expand All @@ -48,7 +69,7 @@ def screenshot():
print("Screen Shot...\n")
time.sleep(1)
myScreenshot = pyautogui.screenshot()
file_name = asksaveasfilename(confirmoverwrite=False,defaultextension='.png')
file_name = asksaveasfilename(confirmoverwrite=False, defaultextension='.png')
myScreenshot.save(file_name)
sys.exit(0)

Expand All @@ -57,13 +78,13 @@ def screenshot():
root.geometry("600x220")

root.configure(background = '#e6e5e5')
frame = tk.Frame(root,bg = '#e6e5e5',pady = 1, width =550, height = 50)
frame.grid(row=0,column=0)
frame = tk.Frame(root, bg = '#e6e5e5', pady = 1, width = 550, height = 50)
frame.grid(row=0, column=0)
frame.pack()
label0 = tk.Label(frame,font=('Comic Sans MS',26,'bold'),text = " Screen Recorder ",bg= '#663300',fg='white',justify ="center")
label0 = tk.Label(frame, font=('Comic Sans MS', 26, 'bold'), text=" Screen Recorder ", bg='#663300', fg='white', justify="center")
label0.pack(side=tk.TOP)
button =tk.Button(frame, font=('arial', 20,'bold'), text="Start Recording",padx=2,pady=2, bg="green",fg = "white",command=run)
button = tk.Button(frame, font=('arial', 20, 'bold'), text="Start Recording", padx=2, pady=2, bg="green", fg="white", command=run)
button.pack(side=tk.TOP)
button1 =tk.Button(frame, font=('arial', 20,'bold'), text="Take Screenshot",padx=2,pady=2, bg="orange",fg = "white",command=screenshot)
button1 = tk.Button(frame, font=('arial', 20, 'bold'), text="Take Screenshot", padx=2, pady=2, bg="orange", fg="white", command=screenshot)
button1.pack()
root.mainloop()