复调录屏软件

版本号: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工作室开源软件(参数自动校正)(欢迎白嫖)相关推荐

  1. recordit:实现电脑录屏生成GIF的轻量级软件!!!极力推荐!!!

    recordit:实现电脑录屏生成GIF的轻量级软件!!!极力推荐!!! 文章目录 recordit:实现电脑录屏生成GIF的轻量级软件!!!极力推荐!!! 一.软件下载 二.实现效果预览: 三.使用 ...

  2. Camtasia studio2023录屏和后期剪辑的软件

    Camtasia 2023是专门用于屏幕录制的软件,功能十分丰富,不仅可以录制电脑屏幕.局部区域和摄像头等,而且还能即时编辑视频,给视频添加转场.旁白.字幕等,能够轻松制作更优秀的视频. 兼顾录屏和后 ...

  3. 软件协会发布开源软件与商业软件知识产权报告

        日前,中国软件行业协会发布了<有关开放源代码软件与商业软件知识产权的研究报告>(以下简称<研究报告>),明确提出"反对政府直接支持或干预任何形式的软件商业模式 ...

  4. 它们养活了一票国产软件!这些开源软件你知道吗

    点击上方"民工哥技术之路",选择"设为星标" 回复"1024"获取独家整理的学习资料! 现在各种国产软件已经牢牢占据了国内市场,无论是在浏览 ...

  5. 它们养活了一票国产软件!这些开源软件你知道吗?

    原文:http://pcedu.pconline.com.cn/916/9161990.html 「本文仅供技术学习参考」 ❝ 现在各种国产软件已经牢牢占据了国内市场,无论是在浏览器.下载软件.压缩软 ...

  6. 【python做个录屏软件】2.用PyQt5做个漂亮的GUI

    本篇内容包含: 1.PyQt5-手动书写GUI 2.无边框无标题栏界面 3.鼠标拖动 4.界面隐藏到桌面右边,靠近弹出. 1. GUI的模板 import sys from PyQt5 import ...

  7. 可以分屏的软件_拥有这款软件,就相当于同时拥有电子相册、录屏、转换、剪辑软件...

    点击蓝字关注我们 对于我们来说,用照片记录生活已经成为我们日常生活中的一种习惯.出去旅游遇到好看的风景,我们会拍照留念:同学或者朋友难得聚餐一次,也会拍个合影:过年回家,全家人难得聚一次,也会拍上一张 ...

  8. windows录屏_录制视频的软件有哪些?三款软件轻松应对录屏_

    2020年10月20日 17:35作者:黄页编辑:黄页 录制视频的软件有哪些?日常生活中我们使用手机和电脑接收外界的信息,在浏览屏幕的过程中,总会遇到一些精彩的内容.像一些直播.游戏.会议.学习的课程 ...

  9. Mac录屏方法:无需下载软件

    目录 如何录屏 1. 开始录屏 2. 终止录屏 意外&解决 如何录屏 1. 开始录屏 打开QuickTime Player(系统自带),File->New Screen Recordin ...

最新文章

  1. SAP S4HANA 账户组的配置里'Int.Std.Grping'选项没勾选导致ABAP程序报错
  2. 技术分析:搞懂链路追踪
  3. JavaScript cookie
  4. C语言从0到1·数据类型及其存储
  5. MATLAB 命令 BOXPLOT
  6. 计算机二级java难吗_计算机二级上机-计算机二级难吗?二级高级语言:分笔试和上机考试笔试90分钟, 爱问知识人...
  7. java职业规划怎么写_java个人职业生涯发展规划书范文
  8. 软件测试答疑:抽奖按钮怎么测试?
  9. Customer-exit总结
  10. 计算机改变世界英语作文,2013年3月3日托福独立写作范文:年轻人改变世界(英文版)...
  11. 篮球记分牌c语言程序和报告,跪求:设计一款篮球记分牌,包括C语言程序和proteus的仿真图,最好附带设计报告.。邮箱liuzhonghuaol@126.com。...
  12. Hans Petter Langtangen
  13. 查看windows系统许可证过期日期方法
  14. 小时候 觉得爸爸就是天 无所不能~
  15. JavaScript_第一天
  16. 5种经典的Linux桌面系统
  17. 向oracle中插入图片和读取图片
  18. 人工智能热潮_团结与增强现实热潮
  19. hexo博客kaze主题自定义社交链接
  20. 优化Hexo性能,使用hexo-neat插件压缩页面,大幅度提升页面性能和响应速度

热门文章

  1. 数仓 Zabbix 集成 Grafana
  2. 数组:605.种花问题
  3. 航空管理系统c语言程序设计,2018年北京航空航天大学软件院991数据结构与C语言程序设计之C程序设计考研核心题库...
  4. 同盾设备指纹简单分析及手机相关ID了解
  5. 关于阿里云OSS资源STS访问控制
  6. 写给新手的DMOZ网站提交注意事项
  7. SCI数据库使用手册(无图版)
  8. 熟悉陌生的2-范数(向量的模)
  9. web前端常用网址大全
  10. Linux内核架构:CPU架构详细介绍(图例解析)