Python做屏幕錄制工具的實現示例
女朋友是一個軟件測試人員,在工作中經常會遇到需要錄屏記錄自己操作,方便后續(xù)開發(fā)同學定位。因為錄屏軟件動不動就開始收費,所以她經常更換錄屏軟件。閑暇之余,我就覺得手癢,感覺可以用萬能的 Python 來解決她的煩惱。
思路
我上網搜尋了一下相關知識,錄制視頻基本上都用的圖像處理庫 PIL 的 ImageGrab 模塊。這個模塊可以用于將當前屏幕的內容或者剪貼板上的內容拷貝到 PIL 圖像內存。
既然這個模塊可以獲取當前屏幕上的內容,那么我一直不間斷地獲取,然后把這些獲取的內容拼起來,那不就是視頻了嗎?
實現
錄制
整體思路是 PIL 模塊中的 ImageGrab 不停的獲得當前屏幕,利用 opencv 寫入視頻流。
def video_record(sttime): global name # 當前的時間(當文件名) name = datetime.now().strftime('%Y-%m-%d %H-%M-%S') # 獲取當前屏幕 screen = ImageGrab.grab() # 獲取當前屏幕的大小 width, high = screen.size # MPEG-4編碼,文件后綴可為.avi .asf .mov等 fourcc = VideoWriter_fourcc('X', 'V', 'I', 'D') # (文件名,編碼器,幀率,視頻寬高) video = VideoWriter('%s.avi' % name, fourcc, 15, (width, high)) print(str(sttime) + '秒后開始錄制----') time.sleep(int(sttime)) print('開始錄制!') global start_time start_time = time.time() while True: if flag: print("錄制結束!") global final_time final_time = time.time() # 釋放 video.release() break # 圖片為RGB模式 im = ImageGrab.grab() # 轉為opencv的BGR模式 imm = cvtColor(np.array(im), COLOR_RGB2BGR) # 寫入 video.write(imm)
錄制視頻的主要代碼只需幾行即可,但是我們需要對錄制操作進行控制,例如開始錄制、結束錄制等。以及獲取屏幕內容之后,需要對內容進行轉碼,然后寫入視頻流。
監(jiān)聽鍵盤事件
錄制視頻我們是使用的一個 while 循環(huán)來獲取屏幕信息,開始之后會一直進行。但是我們需要監(jiān)聽鍵盤事件,來終止這個循環(huán),從而終止錄制視頻。這個監(jiān)聽事件就顯得很重要了,這里采用的是 pynput 這個強大的三方庫,可以全局監(jiān)聽鍵盤、鼠標事件。
我們設定的是用戶在按下鍵盤的 ESC 按鍵后,終止 while 循環(huán),從而終止視頻錄制。
# 監(jiān)聽按鍵 def on_press(key): global flag if key == keyboard.Key.esc: flag = True # 返回False,鍵盤監(jiān)聽結束! return False
主體控制
因為我們需要不斷地獲取屏幕內容,所以我們最好啟動一個線程來干這個事情。
th = threading.Thread(target=video_record, args=sstime) th.start() with keyboard.Listener(on_press=on_press) as listener: listener.join()
視頻信息
錄制視頻結束之后,我們也可以獲取視頻的一些相關信息,例如時長、幀率、分辨率等。
# 視頻信息 def video_info(): # 記得文件名加格式不要錯! video = VideoCapture('%s.avi' % name) fps = video.get(CAP_PROP_FPS) count = video.get(CAP_PROP_FRAME_COUNT) size = (int(video.get(CAP_PROP_FRAME_WIDTH)), int(video.get(CAP_PROP_FRAME_HEIGHT))) print('幀率=%.1f' % fps) print('幀數=%.1f' % count) print('分辨率', size) print('視頻時間=%.3f秒' % (int(count) / fps)) print('錄制時間=%.3f秒' % (final_time - start_time)) print('推薦幀率=%.2f' % (fps * ((int(count) / fps) / (final_time - start_time))))
到此這篇關于Python做屏幕錄制工具的實現示例的文章就介紹到這了,更多相關Python 屏幕錄制工具內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
python中使用 xlwt 操作excel的常見方法與問題
這篇文章主要給大家介紹了關于python中使用 xlwt 操作excel的常見方法與問題的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-01-01Python調用Matplotlib繪制振動圖、箱型圖和提琴圖
Matplotlib作為用于數據可視化的Python軟件包,能夠繪制多種2D圖像,它使用簡單、代碼清晰易懂,深受廣大技術愛好者喜愛。本文主要介紹了通過?Matplotlib繪制振動圖、箱型圖、提琴圖,需要的朋友可以參考一下2021-12-12python3格式化字符串 f-string的高級用法(推薦)
從Python 3.6開始,f-string是格式化字符串的一種很好的新方法。與其他格式化方式相比,它們不僅更易讀,更簡潔,不易出錯,而且速度更快!本文重點給大家介紹python3格式化字符串 f-string的高級用法,一起看看吧2020-03-03