Python实现屏幕录制功能的代码
作者:zzzzjh 发布时间:2023-06-12 12:36:09
标签:python,屏幕,录制
前段时间做视频时需要演示电脑端的操作,因此要用到屏幕录制,下载了个迅捷屏幕录制,但是没有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()
来源:https://blog.csdn.net/zzzzjh/article/details/80903597
0
投稿
猜你喜欢
- 一、MySQL中如何表示当前时间?其实,表达方式还是蛮多的,汇总如下:CURRENT_TIMESTAMPCURRENT_TIMESTAMP(
- 一、requests模块说明介绍Requests是Python语言的第三方的库,专门用于发送HTTP请求。特点1.Requests支持HTT
- 在我们的网站建设中,为网站打造一个契合网站主题的个性化标志则是必需的,这直接关系到能否成功地塑造网站的品牌。这从某些角度看仍在网站推广的范畴
- 在JavaScript中对字符串进行转义和反转义操作,常用的方法莫过于使用encodeURI (decodeURI)、encodeURICo
- 目录项目介绍已有功能环境安装Windows用看这里ubuntu用户看这里使用方式:主要代码项目地址项目介绍可以下载doc,ppt,pdf.对
- 作为微软推出的网页与数据库解决方案,ASP由于有微软得天独厚的操作系统等技术后盾支持,因此得到了迅速的发展,并且正受到越来越多的欢迎,在目前
- 以下代码是保存视频# coding:utf-8import cv2import sysreload(sys)sys.setdefaulten
- 一、原理如题,我有一个模板课件.pptx:其内容:我想复制模板中间的某一页多次,比如复制第1页,然后复制3次,prs = Presentat
- 一、相关代码数据库配置类 MongoDBConn.py#encoding=utf-8'''Mongo Conn连接类
- 一、新建一个用户老板:给我新建一个用户joytom,密码设置为123321,并任意远程主机都能访问,五分钟完成,实现不了就给我提桶走人!小王
- 目录1. 最直观的相加2. 借助 itertools3. 使用 * 解包4. 使用 extend5. 使用列表推导式6. 使用 heapq7
- 今日上课,有位同学问到:w和w+有何区别呢。说实话,我们经常只是用一种权限,没用在意之间的区别,实际上,w+具有可读可写权限,而w只有可写权
- 输入:[1.0000, -1.0000, 3.0000]课本中的标准差计算公式:按照上述公式计算:Numpy中的std计算:import n
- 经常需要读取某个文件夹下所有的图像文件。我使用python写了个简单的代码,读取某个文件夹下某个后缀的文件,将文件名生成为文本(csv格式)
- 引子在工作中,我时不时地会需要在Go中调用外部命令。前段时间我做了一个工具,在钉钉群中添加了一个机器人,@这个机器人可以让它执行一些写好的脚
- 针对之前安装mysql的笔记进行了总结,分享给大家。版本:MySQL-5.7.16-winx64平台:Windows 7 x641、进入my
- 今天启动SQLServer2000时报1053错误 错误如下所示: 发生错误 1053-(服务没有及时响应或控制请求。),此时正在 MSSQ
- 一、gfile模块是什么 gfile模块定义在tensorflow/python/platform/gfile.py,但其源代码实现主要位于
- 本文实例讲述了Python字符串拼接、截取及替换方法。分享给大家供大家参考,具体如下:python字符串连接python字符串连接有几种方法
- 本文实例讲述了thinkphp实现发送邮件密码找回功能的方法。分享给大家供大家参考。具体实现方法如下:首先下载mail.class.php类