前段时间做视频时需要演示电脑端的操作,因此要用到屏幕录制,下载了个迅捷屏幕录制,但是没有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, fourcc, 20, (a, 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()
总结
华山资源网 Design By www.eoogi.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
华山资源网 Design By www.eoogi.com
暂无评论...
更新日志
2024年11月15日
2024年11月15日
- 炉石传说月初最强卡组有哪些 2024月初最强上分卡组推荐
- 狼人杀亮相原生鸿蒙之夜 假面科技强势登陆华为生态
- 12小时光线挑战!AI画质专家才是大平层首选
- 2024游戏IP报告:1~9月规模1960亿 68%用户愿为之付费
- 群星.2024-今夜一起为爱鼓掌电视剧原声带【相信音乐】【FLAC分轨】
- BIGFOUR.2013-大家利事【寰亚】【WAV+CUE】
- 李美凤.1992-情深透全情歌集【EMI百代】【WAV+CUE】
- 田震2024-《时光音乐会》[金峰][WAV+CUE]
- 群星《监听天碟3》[LECD]限量版[WAV+CUE]
- 心妤《声如夏花HQ》头版限量编号[WAV+CUE]
- 群星《摇滚五杰》[低速原抓WAV+CUE][1.1G]
- 群星 《2024好听新歌30》十倍音质 U盘音乐 [WAV+分轨]
- 群星《试音草原·女声篇》经典蒙古民歌[WAV+CUE][1G]
- 陈慧娴《永远是你的朋友》头版限量编号MQA-UHQCD2024[低速原抓WAV+CUE]
- 曼丽·女人三十《如果·爱》限量1:1母盘直刻[低速原抓WAV+CUE]