diff --git a/screen_recorder.py b/screen_recorder.py index dd29189..2ce22b1 100644 --- a/screen_recorder.py +++ b/screen_recorder.py @@ -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) """ @@ -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) @@ -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) @@ -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()