Python實現螢幕錄製功能的程式碼
阿新 • • 發佈:2020-03-03
前段時間做視訊時需要演示電腦端的操作,因此要用到螢幕錄製,下載了個迅捷螢幕錄製,但是沒有vip錄製的視訊有水印且只能錄製二分鐘,於是鄙人想了下能不能通過萬能的python來實現呢?經過一晚上的嘗試發現這條路是可以走的通的。分享一下自己的想法,整體思路是PIL模組中的ImageGrab不停的獲得當前螢幕,利用opencv寫入視訊流話不多說,直接上程式碼,有什麼更好的建議,歡迎大家交流!
"""python + opencv 實現螢幕錄製_by-_Zjh_""" from PIL import ImageGrab import numpy as np import cv2 p = ImageGrab.grab()#獲得當前螢幕 k=np.zeros((200,200),np.uint8) a,b=p.size#獲得當前螢幕的大小 fourcc = cv2.VideoWriter_fourcc(*'XVID')#編碼格式 video = cv2.VideoWriter('test.avi',fourcc,16,(a,b))#輸出檔案命名為test.mp4,幀率為16,可以自己設定 while True: im = ImageGrab.grab() imm=cv2.cvtColor(np.array(im),cv2.COLOR_RGB2BGR)#轉為opencv的BGR格式 video.write(imm) cv2.imshow('imm',k) if cv2.waitKey(1) & 0xFF == ord('q'): break video.release() cv2.destroyAllWindows()
在停止錄製的時候我自己採用的是opencv的q鍵盤退出,實際上還是會有個黑框彈出來,如果有更好的退出錄製方式請留下您的建議,本次還有個不足的地方是沒有增加錄製聲音的功能。最近事情太多了,等放假了出一個完整版的GUI程式。好了今天就先到這了,快要考線性系統這門課了,得開始複習了
最近接觸了 pynput 這個強大的三方庫,可以全域性監聽鍵盤、滑鼠事件。把以前的螢幕錄製的程式改進一下!請忽略以前的程式,直接看這個!
""" python 螢幕錄製改進版,無opencv黑框顯示! @zhou 2020/1/29_ """ from PIL import ImageGrab import numpy as np import cv2 import datetime from pynput import keyboard import threading flag=False #停止標誌位 def video_record(): """ 螢幕錄製! :return: """ name = datetime.datetime.now().strftime('%Y-%m-%d %H-%M-%S') #當前的時間 p = ImageGrab.grab() # 獲得當前螢幕 a,b = p.size # 獲得當前螢幕的大小 fourcc = cv2.VideoWriter_fourcc(*'XVID') # 編碼格式 video = cv2.VideoWriter('%s.avi'%name,20,b)) # 輸出檔案命名為test.mp4,幀率為16,可以自己設定 while True: im = ImageGrab.grab() imm=cv2.cvtColor(np.array(im),cv2.COLOR_RGB2BGR)#轉為opencv的BGR格式 video.write(imm) if flag: print("錄製結束!") break video.release() def on_press(key): """ 鍵盤監聽事件!!! :param key: :return: """ #print(key) global flag if key == keyboard.Key.esc: flag=True print("stop monitor!") return False #返回False,鍵盤監聽結束! if __name__=='__main__': th=threading.Thread(target=video_record) th.start() with keyboard.Listener(on_press=on_press) as listener: listener.join()
現在錄製就不用之前那個黑框了,按 esc按鍵 直接停止錄製!
PS:在通過程式碼給大家介紹下python 實現螢幕錄製
PIL 即pollow 的安裝命令如下:
pip install pillow
其中cv2的安裝是下面這條命令
pip install opencv-python
程式碼實現:
# coding: utf-8 from PIL import ImageGrab import numpy as np import cv2 fps = 20 start = 3 # 延時錄製 end = 15 # 自動結束時間 curScreen = ImageGrab.grab() # 獲取螢幕物件 height,width = curScreen.size video = cv2.VideoWriter('video02.avi',cv2.VideoWriter_fourcc(*'XVID'),fps,(height,width)) imageNum = 0 while True: imageNum += 1 captureImage = ImageGrab.grab() # 抓取螢幕 frame = cv2.cvtColor(np.array(captureImage),cv2.COLOR_RGB2BGR) # 顯示無影象的視窗 cv2.imshow('capturing',np.zeros((1,255),np.uint8)) # 控制視窗顯示位置,方便通過按鍵方式退出 cv2.moveWindow('capturing',height - 100,width - 100) if imageNum > fps * start: video.write(frame) # 退出條件 if cv2.waitKey(50) == ord('q') or imageNum > fps * end: break video.release() cv2.destroyAllWindows()
總結
到此這篇關於Python實現螢幕錄製功能的文章就介紹到這了,更多相關python 螢幕錄製內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!