软件基于opencv、numpy与pyautogui。

tkinter写的界面,窗口区域就是录屏区域。

具有开始、暂停,设置倒计时与帧率功能,非常简洁操作简单。

使用该软件录制的视频:

B站视频

https://www.bilibili.com/video/BV1Hb4y1X7Ge?share_source=copy_web

使用pyinstaller编译为exe,以下是软件目录,一个exe,一个图标(图标可以打包进exe中)

源码就是一个继承了tkinter.TK的类:

"""
PF录屏
"""
from datetime import datetime
import time
from threading import Thread, Event
from tkinter import Tk, Menu, Frame, Label, IntVar, Toplevel, Entry, Scale, HORIZONTAL, messagebox
import numpy as np
import cv2
import pyautoguiclass Window(Tk):def __init__(self):super().__init__()# 倒计时标签对象self.lb = None# 倒计时标签数值self.lbNum = IntVar()self.lbNum.set(3)# 倒计时数值备份self.lbNumBack = 3# 帧率self.fps = 12# 录屏状态self.screencapState = False# 暂停状态self.screencapWaitState = Event()# 取消暂停self.screencapWaitState.set()# 倒计时状态self.countdownState = Falseself.gui()self.menu()def gui(self):"""主窗体:return:"""# 设置窗体背景色self["background"] = "Crimson"# 设置Crimson色为透明self.attributes('-transparentcolor', 'Crimson')# 设置窗体透明度为80%self.attributes("-alpha", 0.8)# 获取主屏幕宽高mainWidth = self.winfo_screenwidth()mainHeight = self.winfo_screenheight()# 窗口宽高width = int(mainWidth * 0.4)height = int(mainHeight * 0.4)# 设置窗口大小与显示位置self.geometry(f'{width}x{height}+{int((mainWidth - width) / 2)}+{int((mainHeight - height) / 2)}')# 标题self.title("PF录屏")# 图标self.iconbitmap("logo.ico")# 倒计时标签f = Frame(self)self.lb = Label(f,textvariable=self.lbNum,fg='red',bg='Crimson',font=('微软雅黑', 66, 'bold'))self.lb.pack()# 水平垂直居中f.pack(expand=1)def menu(self):"""菜单栏:return:"""menubar = Menu(self)# 操作operate = Menu(menubar, tearoff=0)menubar.add_cascade(label="操作", menu=operate)operate.add_command(label='开始', command=self.startScreencap)operate.add_command(label='暂停', command=self.waitScreencap)operate.add_separator()operate.add_command(label='结束', command=self.stopScreencap)# 操作setting = Menu(menubar, tearoff=0)menubar.add_cascade(label="设置", menu=setting)setting.add_command(label='倒计时', command=self.setCountdown)setting.add_separator()setting.add_command(label='帧率', command=self.setFps)# 关于about = Menu(menubar, tearoff=0)menubar.add_cascade(label='关于', menu=about)about.add_command(label='说明', command=self.instruction)about.add_separator()about.add_command(label='作者', command=self.author)self.config(menu=menubar)def setCountdown(self):"""设置倒计时弹窗:return:"""# 设置主窗口不可操作self.attributes("-disabled", 1)# 弹窗t = Toplevel(self)# 弹窗宽高width = 250height = 120# 获取主屏幕宽高mainWidth = t.winfo_screenwidth()mainHeight = t.winfo_screenheight()# 设置窗口大小与显示位置t.geometry(f'{width}x{height}+{int((mainWidth - width) / 2)}+{int((mainHeight - height) / 2)}')# 禁止窗口缩放t.resizable(0, 0)# 标题t.title("倒计时设置")# 图标t.iconbitmap("logo.ico")# 输入框e = Entry(t,width=2,fg='red',font=('微软雅黑', 30, 'bold'))e.pack(pady=30)# 设置输入框焦点e.focus_set()# 设置输入框值e.insert(0, self.lbNumBack)# 绑定弹窗关闭事件t.protocol("WM_DELETE_WINDOW", lambda: self.setCountdownClose(e, t))def setCountdownClose(self, e, t):"""设置倒计时弹窗关闭事件:param e: 设置倒计时弹窗输入框对象:param t: 设置倒计时弹窗对象:return:"""try:# 获取输入框数据num = int(e.get())# 更新倒计时标签数值self.lbNum.set(num)# 备份倒计时设置数值self.lbNumBack = num# 销毁设置倒计时数值弹窗t.destroy()# 设置主窗口可操作self.attributes("-disabled", 0)# 窗口保持在前面self.lift()except ValueError:passdef setFps(self):"""设置帧率弹窗:return:"""# 设置主窗口不可操作self.attributes("-disabled", 1)# 弹窗t = Toplevel(self)# 弹窗宽高width = 250height = 120# 获取主屏幕宽高mainWidth = t.winfo_screenwidth()mainHeight = t.winfo_screenheight()# 设置窗口大小与显示位置t.geometry(f'{width}x{height}+{int((mainWidth - width) / 2)}+{int((mainHeight - height) / 2)}')# 禁止窗口缩放t.resizable(0, 0)# 标题t.title("帧率设置")# 图标t.iconbitmap("logo.ico")# 输入框e = Scale(t,width=60,from_=6,to=60,orient=HORIZONTAL)e.pack()e.set(self.fps)# 绑定弹窗关闭事件t.protocol("WM_DELETE_WINDOW", lambda: self.setFpsClose(e, t))def setFpsClose(self, e, t):"""设置倒计时弹窗关闭事件:param e: 设置滚动条对象:param t: 设置帧率弹窗对象:return:"""try:# 获取滚动条数据num = int(e.get())self.fps = num# 销毁设置帧率弹窗t.destroy()# 设置主窗口可操作self.attributes("-disabled", 0)# 窗口保持在前面self.lift()except ValueError:pass@staticmethoddef instruction():messagebox.showinfo('说明','1、录屏区域为本软件窗口区域\n\n''2、菜单栏进行录屏操作\n\n''3、录屏视频位于本软件目录\n\n''4、倒计时设置秒值-默认:3\n\n''5、帧率常为12~24-默认:12')@staticmethoddef author():messagebox.showinfo('作者', 'pingfan')def screencap(self):"""录屏:return:"""# 倒计时self.countdown()# 编码格式fourcc = cv2.VideoWriter_fourcc(*'XVID')video = cv2.VideoWriter(datetime.now().strftime('%Y-%m-%d %H-%M-%S') + '.mp4',fourcc,self.fps,pyautogui.screenshot(region=(self.winfo_x()+4, self.winfo_y(), self.winfo_width(),self.winfo_height())).size)while self.screencapState:# 暂停self.screencapWaitState.wait()# 转为opencv的BGR格式imm = cv2.cvtColor(np.array(pyautogui.screenshot(region=(self.winfo_x()+4, self.winfo_y(), self.winfo_width(), self.winfo_height()))),cv2.COLOR_RGB2BGR)# 写入视频video.write(imm)# 保存视频video.release()def startScreencap(self):"""开始录屏:return:"""# 判断暂停状态if self.screencapWaitState.isSet():# 判断录屏状态if not self.screencapState:# 录制状态开启self.screencapState = True# 取消缩放self.resizable(0, 0)# 录屏ts = Thread(target=self.screencap)ts.daemon = Truets.start()else:# 判断倒计时状态if not self.countdownState:# 倒计时初始化self.lbNum.set(self.lbNumBack)# 显示标签self.lb.configure(fg="red")# 继续录屏tc = Thread(target=self.continueScreencap)tc.daemon = Truetc.start()def continueScreencap(self):"""继续录屏:return:"""# 倒计时self.countdown()# 取消暂停self.screencapWaitState.set()def waitScreencap(self):"""暂停录屏:return:"""# 判断录屏状态与倒计时状态if self.screencapState and not self.countdownState:self.screencapWaitState.clear()# 暂停指示self.lbNum.set(0)# 显示标签self.lb.configure(fg="red")def stopScreencap(self):"""停止录屏:return:"""# 判断录屏状态与倒计时状态if self.screencapState and not self.countdownState:# 取消暂停self.screencapWaitState.set()# 录屏状态关闭self.screencapState = False# 倒计时初始化self.lbNum.set(self.lbNumBack)# 显示标签self.lb.configure(fg="red")# 开启缩放self.resizable(1, 1)def countdown(self):"""倒计时:return:"""# 倒计时状态开self.countdownState = Truetime.sleep(1)while self.lbNum.get() > 1:self.lbNum.set(self.lbNum.get() - 1)time.sleep(1)# 隐藏标签self.lb.configure(fg="Crimson")# 倒计时状态关self.countdownState = Falseif __name__ == '__main__':root = Window()root.mainloop()

python3 录屏相关推荐

  1. Python3,9分钟撸完一个电脑录屏神器,女神说今晚要给我加鸡腿。

    电脑录屏神器 1.引言 2.代码实战 2.1 编写思路 2.2 代码示例 3.总结 1.引言 女神:鱼哥,忙吗? 小鱼:嗯嗯, 忙, 哦不 , 不忙不忙. 女神:鱼哥,那能不能帮我个忙? 小鱼:这没问 ...

  2. Asciinema终端SSH录屏神器使用

    参考文献:https://yq.aliyun.com/articles/625453(asciinema终端录屏神器使用及过坑) 参考文献:https://zhuanlan.zhihu.com/p/2 ...

  3. asciinema终端录屏神器使用及过坑

    在github上接触到asciinema,一个强大的神器. 它能够在linux等终端上进行录屏,并且录屏不生成视频文件,而是生成文字形式! 另外,它还能够将录制的结果上传到asciinema.org中 ...

  4. 安卓APP限制截屏录屏解决方案

    经过两天的研究, 思路:投屏到电脑,然后windows窗体截图. 具体思路是:可以使用投屏软件,把安卓屏幕投到电脑上,然后根据句柄,截取windows窗口截图 于是,我根据思路,,研究出来了使用pyt ...

  5. Python自动覆盖录屏软件——NIRE工作室开源软件(参数自动校正)(欢迎白嫖)

    复调录屏软件 版本号:0.1.1 Alpha 发行时间:2021年02月11日 发布方:NIRE工作室 开发者:Nire_Yeyu 一.软件描述 目标群体:软件开发工程师.测试工程师.工程实施人员.软 ...

  6. Linux|centos7|终端录屏神器asciinema的部署和初步使用

    前言: Linux下的录屏软件不是很多的,但最近在青云云计算官网无意中发现了一个Linux下的录屏神器,非常的nice,只是在分享方面比较弱. 下面将就centos7下如何部署asciinema,以及 ...

  7. 【安装】Ubuntu20.04下安装ROS的完整过程(内含已装好ROS的虚拟机、虚拟机创建过程、ROS安装过程及全过程录屏)

    2022/12/20重制,精简流程,直接去掉网络问题. 现成的虚拟机 为方便大家学习,如果安装ROS遇到的问题实在太多,也可以直接下载我提供给大家的.已经安装好ROS的Ubuntu虚拟机:下载链接, ...

  8. ffmpeg录屏/摄像头/指定窗口;别名alias设置

    关于ffmpeg的使用方法很多,我简单写一下今天我捣鼓的几个.因为我的项目中要用到录屏和录制摄像头,所以试了下.网上关于录制指定窗口的方法并不多,我也是找了好久,试了好久才试出来的. 好了,废话不多说 ...

  9. 一行命令实现录屏,支持热键和鼠标操作,区域、帧率、格式任你选择

    作者:天元浪子 来源:CSDN 博客 市面上的录屏工具软件有很多,基本都是窗口程序.毕竟,离开GUI的支持,设置参数.选择录像区域等操作都会变得非常困难.不过,窗口程序也并非无往不胜,即便是屏幕录像这 ...

  10. 报告视频录制:腾讯会议录屏+人像画中画特效

    想录制PPT报告.软件操作,有什么免费的软件吗?腾讯会议即可,不仅完全免费,无时间限制,甚至支持人像实时扣图悬浮于桌面上(人像画中画). 视频1. 录制全过程操作 https://v.qq.com/x ...

最新文章

  1. 剑指Offer:合并两个排序的链表【25】
  2. SqlServer用户数据库的系统视图sysobjects、syscolumns、systypes
  3. spring集成 log4j + slf4j
  4. linux能运行英魂之刃吗,英魂之刃需要什么电脑配置
  5. MongoDB 复制集节点增加移除及节点属性配置
  6. 试用期java_Java试用资源
  7. 我的面试标准:能干活、基础要好、有潜力!
  8. Steam提示steam需要在线更新 + steam needs to be online to update最全解决方法
  9. word打出计算机图形符号,word显示所有格式标记
  10. 得到app文稿导出_逻辑思维,阅读付费平台“得到APP”功能分析
  11. Selenium学习 - ActionChains接口
  12. 在vc2008中用_crtBreakAlloc调试内存泄漏
  13. MySQL查询分析工具-Explain
  14. 数据结构与算法(十一)Trie字典树
  15. Among Us 限时免费下载
  16. 如何使用BeaconEye监控CobaltStrike的Beacon
  17. 富芮坤FR801xH蓝牙协议栈启动流程和notify实现温度数据主动上传
  18. 计算机启动u盘启动不了怎么办,电脑没有U盘启动项怎么办?主板不支持U盘启动怎么办?...
  19. 32x32Booth乘法器
  20. python海龟绘图画玫瑰花_python学习(二)之turtle库绘图

热门文章

  1. 3万字报告拆解:硅谷寒冬,投资人还在哪些赛道烧钱?|我在硅谷看未来
  2. mysql count sending data_深入分析MySQL Sending data查询慢问题
  3. 大数据IMF传奇行动绝密课程第91课:SparkStreaming基于Kafka Direct案例实战和内幕源码解密
  4. 安装ie9提示未能完成安装_ie9无法安装的原因以及安装步骤【图文教程】
  5. QuerySet,本质上是一个给定的模型的对象列表
  6. nc65右键生成菜单_NC常见问题处理
  7. java计算机毕业设计网上鲜花店系统源码+系统+数据库+lw文档
  8. 定制化件T恤其实很简单,您需要了解的有以下几点
  9. 时间块青春版android版,时间块青春版
  10. 背壳BAKAZU 2013复古邮差风帆布休闲潮男腰包 A801BK 黑色 腰包胸包【图片 价格 品牌 报价】-京东商城...