Python实现屏幕录制功能的代码
前段时间做视频时需要演示电脑端的操作,因此要用到屏幕录制,下载了个迅捷屏幕录制,但是没有vip录制的视频有水印且只能录制二分钟,于是鄙人想了下能不能通过万能的python来实现呢?经过一晚上的尝试发现这条路是可以走的通的。分享一下自己的想法,整体思路是PIL模块中的ImageGrab不停的获得当前屏幕,利用opencv写入视频流话不多说,直接上代码,有什么更好的建议,欢迎大家交流!
"""python+opencv实现屏幕录制_by-_Zjh_"""
fromPILimportImageGrab
importnumpyasnp
importcv2
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,可以自己设置
whileTrue:
im=ImageGrab.grab()
imm=cv2.cvtColor(np.array(im),cv2.COLOR_RGB2BGR)#转为opencv的BGR格式
video.write(imm)
cv2.imshow('imm',k)
ifcv2.waitKey(1)&0xFF==ord('q'):
break
video.release()
cv2.destroyAllWindows()
在停止录制的时候我自己采用的是opencv的q键盘退出,实际上还是会有个黑框弹出来,如果有更好的退出录制方式请留下您的建议,本次还有个不足的地方是没有增加录制声音的功能。最近事情太多了,等放假了出一个完整版的GUI程序。好了今天就先到这了,快要考线性系统这门课了,得开始复习了
最近接触了pynput这个强大的三方库,可以全局监听键盘、鼠标事件。把以前的屏幕录制的程序改进一下!请忽略以前的程序,直接看这个!
"""
python屏幕录制改进版,无opencv黑框显示!
@zhou2020/1/29_
"""
fromPILimportImageGrab
importnumpyasnp
importcv2
importdatetime
frompynputimportkeyboard
importthreading
flag=False#停止标志位
defvideo_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,fourcc,20,(a,b))#输出文件命名为test.mp4,帧率为16,可以自己设置
whileTrue:
im=ImageGrab.grab()
imm=cv2.cvtColor(np.array(im),cv2.COLOR_RGB2BGR)#转为opencv的BGR格式
video.write(imm)
ifflag:
print("录制结束!")
break
video.release()
defon_press(key):
"""
键盘监听事件!!!
:paramkey:
:return:
"""
#print(key)
globalflag
ifkey==keyboard.Key.esc:
flag=True
print("stopmonitor!")
returnFalse#返回False,键盘监听结束!
if__name__=='__main__':
th=threading.Thread(target=video_record)
th.start()
withkeyboard.Listener(on_press=on_press)aslistener:
listener.join()
现在录制就不用之前那个黑框了,按esc按键直接停止录制!
PS:在通过代码给大家介绍下python实现屏幕录制
PIL即pollow的安装命令如下:
pipinstallpillow
其中cv2的安装是下面这条命令
pipinstallopencv-python
代码实现:
#coding:utf-8
fromPILimportImageGrab
importnumpyasnp
importcv2
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
whileTrue:
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)
ifimageNum>fps*start:
video.write(frame)
#退出条件
ifcv2.waitKey(50)==ord('q')orimageNum>fps*end:
break
video.release()
cv2.destroyAllWindows()
总结
到此这篇关于Python实现屏幕录制功能的文章就介绍到这了,更多相关python屏幕录制内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。
