Python實(shí)現(xiàn)屏幕錄制功能的代碼
前段時(shí)間做視頻時(shí)需要演示電腦端的操作,因此要用到屏幕錄制,下載了個(gè)迅捷屏幕錄制,但是沒(méi)有vip錄制的視頻有水印且只能錄制二分鐘,于是鄙人想了下能不能通過(guò)萬(wàn)能的python來(lái)實(shí)現(xiàn)呢?經(jīng)過(guò)一晚上的嘗試發(fā)現(xiàn)這條路是可以走的通的。分享一下自己的想法,整體思路是PIL模塊中的ImageGrab不停的獲得當(dāng)前屏幕,利用opencv寫入視頻流話不多說(shuō),直接上代碼,有什么更好的建議,歡迎大家交流!
"""python + opencv 實(shí)現(xiàn)屏幕錄制_by-_Zjh_"""
from PIL import ImageGrab
import numpy as np
import cv2
p = ImageGrab.grab()#獲得當(dāng)前屏幕
k=np.zeros((200,200),np.uint8)
a,b=p.size#獲得當(dāng)前屏幕的大小
fourcc = cv2.VideoWriter_fourcc(*'XVID')#編碼格式
video = cv2.VideoWriter('test.avi', fourcc, 16, (a, b))#輸出文件命名為test.mp4,幀率為16,可以自己設(shè)置
while True:
im = ImageGrab.grab()
imm=cv2.cvtColor(np.array(im), cv2.COLOR_RGB2BGR)#轉(zhuǎn)為opencv的BGR格式
video.write(imm)
cv2.imshow('imm', k)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
video.release()
cv2.destroyAllWindows()
在停止錄制的時(shí)候我自己采用的是opencv的q鍵盤退出,實(shí)際上還是會(huì)有個(gè)黑框彈出來(lái),如果有更好的退出錄制方式請(qǐng)留下您的建議,本次還有個(gè)不足的地方是沒(méi)有增加錄制聲音的功能。最近事情太多了,等放假了出一個(gè)完整版的GUI程序。好了今天就先到這了,快要考線性系統(tǒng)這門課了,得開始復(fù)習(xí)了
最近接觸了 pynput 這個(gè)強(qiáng)大的三方庫(kù),可以全局監(jiān)聽鍵盤、鼠標(biāo)事件。把以前的屏幕錄制的程序改進(jìn)一下!請(qǐng)忽略以前的程序,直接看這個(gè)!
"""
python 屏幕錄制改進(jìn)版,無(wú)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 #停止標(biāo)志位
def video_record():
"""
屏幕錄制!
:return:
"""
name = datetime.datetime.now().strftime('%Y-%m-%d %H-%M-%S') #當(dāng)前的時(shí)間
p = ImageGrab.grab() # 獲得當(dāng)前屏幕
a, b = p.size # 獲得當(dāng)前屏幕的大小
fourcc = cv2.VideoWriter_fourcc(*'XVID') # 編碼格式
video = cv2.VideoWriter('%s.avi'%name, fourcc, 20, (a, b)) # 輸出文件命名為test.mp4,幀率為16,可以自己設(shè)置
while True:
im = ImageGrab.grab()
imm=cv2.cvtColor(np.array(im), cv2.COLOR_RGB2BGR)#轉(zhuǎn)為opencv的BGR格式
video.write(imm)
if flag:
print("錄制結(jié)束!")
break
video.release()
def on_press(key):
"""
鍵盤監(jiān)聽事件?。?!
:param key:
:return:
"""
#print(key)
global flag
if key == keyboard.Key.esc:
flag=True
print("stop monitor!")
return False #返回False,鍵盤監(jiān)聽結(jié)束!
if __name__=='__main__':
th=threading.Thread(target=video_record)
th.start()
with keyboard.Listener(on_press=on_press) as listener:
listener.join()
現(xiàn)在錄制就不用之前那個(gè)黑框了,按 esc按鍵 直接停止錄制!
PS:在通過(guò)代碼給大家介紹下python 實(shí)現(xiàn)屏幕錄制
PIL 即pollow 的安裝命令如下:
pip install pillow
其中cv2的安裝是下面這條命令
pip install opencv-python
代碼實(shí)現(xiàn):
# coding: utf-8
from PIL import ImageGrab
import numpy as np
import cv2
fps = 20
start = 3 # 延時(shí)錄制
end = 15 # 自動(dòng)結(jié)束時(shí)間
curScreen = ImageGrab.grab() # 獲取屏幕對(duì)象
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)
# 顯示無(wú)圖像的窗口
cv2.imshow('capturing', np.zeros((1, 255), np.uint8))
# 控制窗口顯示位置,方便通過(guò)按鍵方式退出
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()
總結(jié)
到此這篇關(guān)于Python實(shí)現(xiàn)屏幕錄制功能的文章就介紹到這了,更多相關(guān)python 屏幕錄制內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python用match()函數(shù)爬數(shù)據(jù)方法詳解
在本篇文章里小編給大家整理了關(guān)于python用match()函數(shù)爬數(shù)據(jù)方法以及相關(guān)知識(shí)點(diǎn),需要的朋友們學(xué)習(xí)下。2019-07-07
django應(yīng)用JWT(JSON?Web?Token)實(shí)戰(zhàn)教程
在前后端分離的項(xiàng)目中,JWT(JSON?Web?Token)作為一種廣泛使用的身份驗(yàn)證和授權(quán)機(jī)制,提供了一種安全、高效的方式來(lái)保護(hù)RESTful?API,本文詳細(xì)介紹了JWT的概念、優(yōu)勢(shì)、在Django中的應(yīng)用步驟和使用方法,是構(gòu)建安全、高效Web應(yīng)用的有效指南2024-10-10
在python中實(shí)現(xiàn)導(dǎo)入一個(gè)需要傳參的模塊
這篇文章主要介紹了在python中實(shí)現(xiàn)導(dǎo)入一個(gè)需要傳參的模塊,具有很好的參考價(jià)值,希望可以給大家一個(gè)參考,以后在遇到這種的情況的時(shí)候,知道如何應(yīng)對(duì)2021-05-05
Python3 pyecharts生成Html文件柱狀圖及折線圖代碼實(shí)例
這篇文章主要介紹了Python3 pyecharts生成Html文件柱狀圖及折線圖代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09
利用Django提供的ModelForm增刪改數(shù)據(jù)的方法
這篇文章主要介紹了利用Django提供的ModelForm增刪改數(shù)據(jù),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-01-01
在linux系統(tǒng)下安裝python librtmp包的實(shí)現(xiàn)方法
今天小編就為大家分享一篇在linux系統(tǒng)下安裝python librtmp包的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-07-07

