Python自动覆盖录屏软件——NIRE工作室开源软件(参数自动校正)(欢迎白嫖)
复调录屏软件
版本号:0.1.1 Alpha
发行时间:2021年02月11日
发布方:NIRE工作室
开发者:Nire_Yeyu
一、软件描述
- 目标群体:软件开发工程师、测试工程师、工程实施人员、软件购置方
- 软件功能:依照设定自动覆盖过期录屏文件
- 使用场景:相关人群在使用或测试软件过程中,可能发现软件异常,但不易描述或记录具体问题现象和自己的操作过程。从而导致研发人员在Bug修复过程中,需要耗费大量时间与精力在问题的复现上。通过复调录屏软件即第三方软件(以下称:本软件),用户可以24小时不间断录屏,一旦超过预设时间,将自动覆盖过期视频,从而保证占用较小磁盘空间。以此减少研发、测试、工程等互相推卸责任的现象,降低软件维护成本,提高工作效率。
- 关键字: 录屏、覆盖过期文件、工作效率
二、程序流程
2.1 参数设置
- 本软件有两个文件:配置文件 与 代码文件
- 单个文件录制时间、保留文件个数由用户在配置文件中自行设置,而视频的FPS由本软件自动设置
2.2 录制的视频播放速度过快问题
- 不少尝试用Python录屏的开发者都会遇到这个问题,假设录制时长为10秒,录制结束后,用播放器不到5秒就放完了,而且播放速度明显过快。
- 这种播放过快或过慢的现象,是由于FPS设置不恰当造成的。
- 本软件会在初始化过程中自动设置适合当前机器的FPS,并在录制一段时间后进行自动校正,从而保证录屏效果。
2.3 结束条件
- 软件在运行时,会开启键盘监听事件,一旦检测到用户按下ESC,软件会停止运行。建议用户用ESC结束程序,不要直接点击右上角的×关闭,否则录制的视屏没有进行释放操作,会出现异常现象。
三、配置文件
config.ini
[screen]
fps = 7.0
bk = 3
time = 10
四、源文件
VideoCut.py
# 复调录屏软件 : 持续迭代近期数据的录屏软件# Copyright (c) 2021 NIRE工作室# 在此免费授予任何获得软件和相关文件副本(“软件”)的开发者,无限制经营软件的权利
# 权利包括但不限于使用、复制、修改、合并、发布、分发、转授和/或出售软件副本# 但软件使用者必须遵守以下条件:# 上述版权声明和本许可声明应包含在软件的所有副本或重要部分中。# 本软件是"按现样"提供,并无任何形式的保证,亦无任何形式的表达或暗示
# 包括但不局限于对可销售性、达到特定目的的适合性的保证。
# 不论是特殊、偶然或任何情况之下,NIRE工作室概不负任何责任。"""
复调录屏软件通过Python3.7进行开发使用复调录屏软件,您可以轻松地在各种平台上录制音频。
并且通过配置文件,设置保留视频的时长以及保留的视频个数
从而达到持续录屏,但节省空间,保留重要信息的目的复调录屏软件的设计灵感来自:日常测试软件过程中,需要记录操作过程及崩溃现象
如果长时间开启市面上现有的录屏软件会导致视频文件过大
并且在长视频中不易提取有效信息关键字:持续录屏、节省空间
"""__author__ = "Nire_Yeyu"
__mail__ = "Nire_Yeyu@163.com"
__version__ = "0.1.1 Alpha"
__date__ = "2021.02.10"# coding: utf-8import os
import time
import threading
import configparser as cp
from datetime import datetime
# 尝试添加第三方库
try:import cv2import numpy as npfrom PIL import ImageGrabfrom pynput import keyboard
except ImportError:print("初始化失败:缺少依赖库")raiseclass FileMgt(object):"""文件管理类:通过此类实现对配置文件的读写,以及相关文件、文件夹的管控"""def __init__(self):self.current = os.getcwd() # 程序所在路径self.screen_record_path = os.path.join(self.current, "video") # 存放视频文件的文件夹路径self.config_path = ".\\config.ini" # 配置文件路径self.video_path = "" # 视频文件路径self.fps = 7 # 帧率self.n_screen_record = 3 # 保留文件数量self.video_time = 300 # 单个文件录制时长(单位:秒)self.create_folder() # 创建文件夹def create_folder(self):"""创建文件夹"""try:if not os.path.exists(self.screen_record_path):os.mkdir(self.screen_record_path)except:print("错误:文件夹创建异常")return Falsedef make_file_path(self):"""依据当前时间获取欲录制视频路径"""now = str(datetime.now())[:19].replace(':', '_').replace('-', '_').replace(' ', '_')video_name = "{}.avi".format(now)self.video_path = os.path.join(self.screen_record_path, video_name)return self.video_pathdef control_screen_record_path(self):"""删除过期文件"""try:while True:dir_list = os.listdir(self.screen_record_path)if len(dir_list) >= self.n_screen_record:dir_list = sorted(dir_list,key=lambda x: os.path.getmtime(os.path.join(self.screen_record_path, x)))f_path = os.path.join(self.screen_record_path, dir_list[0])os.remove(f_path)print("删除:", f_path)else:breakexcept FileNotFoundError:print("错误:系统找不到指定的视频文件")def read_config(self):"""读取配置文件"""try:inifile = cp.ConfigParser()inifile.read(self.config_path, "UTF-8")self.fps = int(float(inifile.get("screen", "fps"))) # 帧率self.n_screen_record = int(inifile.get("screen", "bk")) # 保存视频个数self.video_time = int(inifile.get("screen", "time")) # 单个视频时长(单位:秒)if self.fps <= 0:print("配置文件异常:fps必须大于0")return Falseif self.n_screen_record < 3:print("配置文件异常:保留视频个数不得小于3个")return Falseif self.video_time < 10 or self.video_time > 60 * 60:print("配置文件异常:单个视频时长应在10秒至1小时之间")return Falsereturn Trueexcept FileNotFoundError:print("读取配置文件错误:未找到配置文件")return Falsedef set_config(self, fps, record, video_time):"""设置配置文件信息"""self.fps = fpsself.n_screen_record = recordself.video_time = video_timedef write_config(self):"""写配置文件"""try:inifile = cp.ConfigParser()inifile.read(self.config_path, "UTF-8")inifile["screen"]["fps"] = str(self.fps) # 帧率inifile["screen"]["bk"] = str(self.n_screen_record) # 保存视频个数inifile["screen"]["time"] = str(self.video_time) # 单个视频时长(单位:秒)with open(self.config_path, 'w') as configfile:inifile.write(configfile)return Trueexcept FileNotFoundError:print("写配置文件错误:未找到配置文件")return Falseclass VideoMgt(object):"""录屏管理类:通过该类实现录屏功能管控"""def __init__(self):self.flag = False # 录屏结束标记位self.end = False # 程序结束标记位self.fileMgt = FileMgt() # 文件管理对象def set_flag(self):"""设置录屏标志位为结束录屏状态"""self.flag = Truedef test(self):"""测试当前计算机性能,实现参数自动配置"""print("初始化中,请稍候...")if self.fileMgt.read_config() is False:print("读取配置文件错误")return Falsetest_file_name = "test.avi" # 初始化过程中的测试文件名称timer = threading.Timer(5, # 测试时长为5秒self.set_flag)timer.start()screen = ImageGrab.grab() # 获取当前屏幕video = cv2.VideoWriter(test_file_name,cv2.VideoWriter_fourcc(*"XVID"), # 视频编码格式: XVID7, # 帧率: 20screen.size # 尺寸: 截屏界面大小)count = 0time_start = time.time()while True:cv2.waitKey(50) # 图像暂留时间im = ImageGrab.grab() # 获取当前屏幕imm = cv2.cvtColor(np.array(im), cv2.COLOR_RGB2BGR) # 转换为BGR格式video.write(imm) # 将当前屏幕保存至视频文件中count = count + 1 # 记录已存储帧数"""已录制5秒,测试结束"""if self.flag:breaktime_end = time.time()video.release() # 释放视频资源self.fileMgt.fps = count // (time_end - time_start) # 计算当前计算机性能可满足的帧率self.fileMgt.write_config()os.remove(os.path.join( # 删除测试文件self.fileMgt.current, test_file_name))self.flag = Falseprint("初始化完成")print("帧率:", self.fileMgt.fps)print("时长:", self.fileMgt.video_time)print("保留视频个数:", self.fileMgt.n_screen_record)return Truedef make_video(self):"""录屏"""self.fileMgt.control_screen_record_path() # 在录制新视频之前,先删除过期文件if self.fileMgt.read_config() is False:return Falsetimer = threading.Timer(self.fileMgt.video_time, # 依据配置文件设置每一段视频的时长self.set_flag)timer.start()screen = ImageGrab.grab() # 获取当前屏幕video = cv2.VideoWriter(self.fileMgt.make_file_path(), # 路径: 视频文件路径cv2.VideoWriter_fourcc(*"XVID"), # 视频编码格式: XVIDself.fileMgt.fps, # 帧率: 由配置文件获取screen.size # 尺寸: 截屏界面大小)print("录制:", self.fileMgt.video_path)time_start = time.time()count = 0while True:cv2.waitKey(50) # 图像暂留时间im = ImageGrab.grab() # 获取当前屏幕imm = cv2.cvtColor(np.array(im), cv2.COLOR_RGB2BGR) # 转换为BGR格式video.write(imm) # 将当前屏幕保存至视频文件中count = count + 1"""录制结束"""if self.flag:breakvideo.release()self.flag = Falsetime_end = time.time()self.fileMgt.fps = count // (time_end - time_start) # 计算当前计算机性能可满足的帧率if self.fileMgt.write_config() is False:return Falseprint("录制成功")return Truedef on_press(self, key):"""按键事件"""if key == keyboard.Key.esc: # 检测ESC按键self.flag = True # 标志录屏结束self.end = True # 标志程序结束def run(self):"""程序运行"""if self.test() is False:return Falsewhile(True):if self.make_video() is False:return Falseif self.end:print("录制结束")return Trueif __name__ == "__main__":print("*" * 27, "复调录屏软件", "*" * 27)print("版权方:NIRE工作室")print("按ESC结束录屏")print("版本号:", __version__)VedioMgt = VideoMgt()th = threading.Thread(target=VedioMgt.run) # 录屏逻辑th.start()with keyboard.Listener(on_press=VedioMgt.on_press) as listener: # 监听键盘listener.join()
五、编译
- 需要使用本软件的开发者只需将Config.ini与VideoCut.py这连个文件保存至本地便可以运行。
- 本软件已经过长时间的使用,可以确保以上代码可以编译通过。
- 如果在编译过程中发现有大量错误,请检查本地是否已安装需要用到的第三方库。
六、生成可执行文件
- 如果有些开发者需要生成可执行文件,可以点击查看生成方法。
6.1 Pynput ImportError
- 如果在打包完成后出现上述问题,是因为当前使用的pynput版本过高,当前最新版本为1.7.2,卸载后安装1.6.8,问题可解决。
6.2 PermissionError: [Errno 13] Permission denied:“XXX.dll”
- 网络上的解释是这个dll正在被使用或找不到这个库,其实根本不是这样。
- 解决方法:把360关掉(对,你刚刚被360制裁了)
七、结语
- 致每一位打工者:
- 中国的程序员每天没日没夜地工作着,创造了大量现象级的软件,却领着远低于发达国家程序员的薪资,如果大家甘于现状,我们创造的价值将永远被资本家占据着,还要每天听着这些人歌颂996这样的制度。
- 如果跳出来创业,又会面临大公司的围剿。
- 在这样的情况下,只有大家更加踊跃地分享自己的劳动成果,才能给一个个新兴的小团队带来便利,让他们有机会与现有的大公司较量,才能促进中国的IT行业向着更健康的方向发展。
- 愿奉献大于索取,愿明日优于过往。
Python自动覆盖录屏软件——NIRE工作室开源软件(参数自动校正)(欢迎白嫖)相关推荐
- recordit:实现电脑录屏生成GIF的轻量级软件!!!极力推荐!!!
recordit:实现电脑录屏生成GIF的轻量级软件!!!极力推荐!!! 文章目录 recordit:实现电脑录屏生成GIF的轻量级软件!!!极力推荐!!! 一.软件下载 二.实现效果预览: 三.使用 ...
- Camtasia studio2023录屏和后期剪辑的软件
Camtasia 2023是专门用于屏幕录制的软件,功能十分丰富,不仅可以录制电脑屏幕.局部区域和摄像头等,而且还能即时编辑视频,给视频添加转场.旁白.字幕等,能够轻松制作更优秀的视频. 兼顾录屏和后 ...
- 软件协会发布开源软件与商业软件知识产权报告
日前,中国软件行业协会发布了<有关开放源代码软件与商业软件知识产权的研究报告>(以下简称<研究报告>),明确提出"反对政府直接支持或干预任何形式的软件商业模式 ...
- 它们养活了一票国产软件!这些开源软件你知道吗
点击上方"民工哥技术之路",选择"设为星标" 回复"1024"获取独家整理的学习资料! 现在各种国产软件已经牢牢占据了国内市场,无论是在浏览 ...
- 它们养活了一票国产软件!这些开源软件你知道吗?
原文:http://pcedu.pconline.com.cn/916/9161990.html 「本文仅供技术学习参考」 ❝ 现在各种国产软件已经牢牢占据了国内市场,无论是在浏览器.下载软件.压缩软 ...
- 【python做个录屏软件】2.用PyQt5做个漂亮的GUI
本篇内容包含: 1.PyQt5-手动书写GUI 2.无边框无标题栏界面 3.鼠标拖动 4.界面隐藏到桌面右边,靠近弹出. 1. GUI的模板 import sys from PyQt5 import ...
- 可以分屏的软件_拥有这款软件,就相当于同时拥有电子相册、录屏、转换、剪辑软件...
点击蓝字关注我们 对于我们来说,用照片记录生活已经成为我们日常生活中的一种习惯.出去旅游遇到好看的风景,我们会拍照留念:同学或者朋友难得聚餐一次,也会拍个合影:过年回家,全家人难得聚一次,也会拍上一张 ...
- windows录屏_录制视频的软件有哪些?三款软件轻松应对录屏_
2020年10月20日 17:35作者:黄页编辑:黄页 录制视频的软件有哪些?日常生活中我们使用手机和电脑接收外界的信息,在浏览屏幕的过程中,总会遇到一些精彩的内容.像一些直播.游戏.会议.学习的课程 ...
- Mac录屏方法:无需下载软件
目录 如何录屏 1. 开始录屏 2. 终止录屏 意外&解决 如何录屏 1. 开始录屏 打开QuickTime Player(系统自带),File->New Screen Recordin ...
最新文章
- SAP S4HANA 账户组的配置里'Int.Std.Grping'选项没勾选导致ABAP程序报错
- 技术分析:搞懂链路追踪
- JavaScript cookie
- C语言从0到1·数据类型及其存储
- MATLAB 命令 BOXPLOT
- 计算机二级java难吗_计算机二级上机-计算机二级难吗?二级高级语言:分笔试和上机考试笔试90分钟, 爱问知识人...
- java职业规划怎么写_java个人职业生涯发展规划书范文
- 软件测试答疑:抽奖按钮怎么测试?
- Customer-exit总结
- 计算机改变世界英语作文,2013年3月3日托福独立写作范文:年轻人改变世界(英文版)...
- 篮球记分牌c语言程序和报告,跪求:设计一款篮球记分牌,包括C语言程序和proteus的仿真图,最好附带设计报告.。邮箱liuzhonghuaol@126.com。...
- Hans Petter Langtangen
- 查看windows系统许可证过期日期方法
- 小时候
觉得爸爸就是天
无所不能~
- JavaScript_第一天
- 5种经典的Linux桌面系统
- 向oracle中插入图片和读取图片
- 人工智能热潮_团结与增强现实热潮
- hexo博客kaze主题自定义社交链接
- 优化Hexo性能,使用hexo-neat插件压缩页面,大幅度提升页面性能和响应速度