利用Python编写简易的录制屏幕小工具
作者:Sir?老王 发布时间:2023-12-17 04:34:57
标签:Python,录制,屏幕
由于最近测试需要录制系统界面的操作过程,因为都是全屏的操作,所以用python做一个简单的录屏小工具。
实现过程也是比较简单,就是通过对屏幕操作进行不断的截图,最后将截图合成一个操作视频的过程。由于我们只是做简单的截屏功能,并没有加入音频效果。
1、准备
开始之前我们还是按照以往的方式介绍一下使用到的第三方的python模块。
from PIL import ImageGrab
import numpy as np
import cv2
import datetime
from pynput import keyboard
import threading
from loguru import logger
import time
由于实现过程比较少,这里我们不再创建标准的class实现,直接在.py文件写相关的函数来实现。
2、代码
实现过程主要是通过两个函数来实现的,一个是实现具体的屏幕截图操作,并且将其写入视频。另一个则是用来监听键盘的输入,若是按下esc键时则退出当前的录制操作。
初始化一个变量作为停止标志。
is_running = True
创建录制过程生成函数generate_video,用以生成录制视频。
def generate_video():
'''
生成录制视频函数
:return:
'''
file_name = datetime.datetime.now().strftime('%Y-%m-%d %H-%M-%S')
screen = ImageGrab.grab()
width, height = screen.size
fourcc = cv2.VideoWriter_fourcc(*'XVID')
video = cv2.VideoWriter('%s.avi' % file_name, fourcc, 20, (width, height))
for n in range(3):
logger.debug(str(3 - n) + '秒后开始录制!')
time.sleep(1)
while True:
im1 = ImageGrab.grab()
im2 = cv2.cvtColor(np.array(im1), cv2.COLOR_RGB2BGR)
video.write(im2)
if is_running is False:
logger.debug('屏幕录制已经结束!')
break
video.release()
创建键盘监听函数press_keyboard,监听输入,若是按下esc键则改变运行状态。
is_running=False
def press_keyboard(key):
'''
键盘监听函数
:param key:
:return:
'''
global is_running
if key == keyboard.Key.esc:
logger.debug('ESC已经被按下,马上结束录制!')
is_running = False
return False
执行主函数main,启动则执行屏幕录制。
if __name__ == '__main__':
thread_ = threading.Thread(target=generate_video)
thread_.start()
logger.debug(' 开始进入视频录制!')
with keyboard.Listener(on_press=press_keyboard) as listener:
listener.join()
最后,使用pyinstaller将其打包成exe的可执行应用,使用时直接双击打开即可开始录制屏幕的操作过程。
pyinstaller -i .\video.ico -Fw .\test2.py
至此,录制屏幕小工具就大功告成了。
来源:https://mp.weixin.qq.com/s/Dt0obCVDS9KN_K4uYxgpwQ


猜你喜欢
- Photoshop Express,也就是传说中的web版photoshop,来了。和想象中的web photoshop相比,这个Photo
- 说明1、字典运算中的键必须是不可变类型,如整数(int)、浮点数(float)、字符串(str)、元组(tuple)等。2、列表(list)
- 本文实例为大家分享了python超市商品销售管理系统的具体代码,供大家参考,具体内容如下需求分析:超市销售管理系统功能1.欢迎用户使用超市销
- adodb.stream对象的方法/属性cancel 方法使用方法如下object.cancel说明:取消执行挂起的异步 execute 或
- mysql密码过期了,今天遇到了连接mysql,总是连接不上去, 错误现象1: An attempt by a client to chec
- mysql常用导出数据命令:1.mysql导出整个数据库 mysqldump -hhostname -uusername -pp
- 项目介绍我们先来看看成果:首先写了一个能够操作的GUI界面。其中两个按钮对应相应的功能:采集人脸:识别功能:我可是牺牲了色相五五五五。。。(
- Transact-SQL中的存储过程,非常类似于Java语言中的方法,它可以重复调用。当存储过程执行一次后,可以将语句缓存中,这样下次执行的
- 好久没写技术相关的文章,这次写篇有意思的,关于一个有意思的游戏——QQ找茬,关于一种有意思的语言——Python,关于一个有意思的库——Qt
- 目录1. 单变量 :=2. 多变量 :=3. 小结:=??Go 语言中 = 和 := 有什么区别1. 单变量 :=Go 语言中新增了一个特殊
- 导语随着网购的广泛普及,现在大部分年轻人都喜欢上了网购的方式。很多东西物美价廉,出不出户也能满足你的购买需求!尤其是中秋来临,哪些假期短回不
- 单例模式概念单例模式:“保证一个类仅有一个实例,并提供一个访问它的在这里插入代码片全局访问点。单例模式会阻止其他对象实例化其自己的单例对象的
- computedcomputed只接收一个getter函数1、getter必须有返回值2、computed返回一个只读响应式ref对象 (只
- 可迭代(iterable)迭代(遍历)就是按照某种顺序逐个访问对象中的每一项。Python中有很多对象都是可以通过for语句来直接遍历的,例
- Python 2.x 很快就要 失去官方支持 了,尽管如此,从 Python 2 迁移到 Python 3 却并没有想象中那么难。我在上周用
- 微信小程序可谓是9月21号之后最火的一个名词了,一经出现真是轰炸了整个开发人员,当然很多App开发人员有了一个担心,微信小程序的到来会不会让
- #-*-coding:utf-8-*-'''Created on 2014年1月10日@author: hhdys&
- 回顾我们的python制作小游戏之路,几篇非常精彩的文章我们用python实现了坦克大战python制作坦克大战我们用python实现了飞船
- python语言最常见的括号有三种,分别是:小括号( )、中括号[ ]和大括号也叫做花括号{ }。其作用也各不相同,分别用来代表不同的pyt
- 1. 下载可以去清华源下载最新版的anaconda包,这比在官方网站下载快得多,地址如下:https://mirrors.tuna.tsin