python实现录屏功能
python实现录屏功能
将生成的avi文件转为mp4格式后删掉avi文件
参考感谢:https://www.cnblogs.com/peachh/p/16549254.html
import os
import cv2
import time
import threading
import numpy as np
from PIL import ImageGrab
from pynput import keyboard
from datetime import datetime
from moviepy.editor import VideoFileClipflag = Falsedef video_record():global name, start_time, final_timename = datetime.now().strftime('%Y-%m-%d %H-%M-%S') # 当前的时间(作为文件名)screen = ImageGrab.grab() # 获取当前屏幕width, height = screen.size # 获取当前屏幕的大小fourcc = cv2.VideoWriter_fourcc(*'XVID') # MPEG-4编码,文件后缀可为.avi .asf .mov等video = cv2.VideoWriter(f'{name}.avi', fourcc, 20, (width, height)) # (文件名,编码器,帧率,视频宽高)print('开始录制!')start_time = time.time()while True:if flag:print("录制结束!")final_time = time.time()video.release() # 释放breakim = ImageGrab.grab() # 图片为RGB模式imm = cv2.cvtColor(np.array(im), cv2.COLOR_RGB2BGR) # 转为OpenCV的BGR模式video.write(imm) # 写入def on_press(key):global flagif key == keyboard.KeyCode.from_char('1') or key == keyboard.KeyCode.from_char('q'):flag = True # 改变return False # 返回False,键盘监听结束!def video_info():video = cv2.VideoCapture(f'{name}.avi') # 记得文件名加格式不要错!fps = video.get(cv2.CAP_PROP_FPS)count = video.get(cv2.CAP_PROP_FRAME_COUNT)size = (int(video.get(cv2.CAP_PROP_FRAME_WIDTH)), int(video.get(cv2.CAP_PROP_FRAME_HEIGHT)))print('帧率=%.1f' % fps)print('帧数=%.1f' % count)print('分辨率', size)print('视频时间=%.3f秒' % (count / fps))print('录制时间=%.3f秒' % (final_time - start_time))print('推荐帧率=%.2f' % (fps * ((count / fps) / (final_time - start_time))))def avi_2_mp4():# 指定输入文件路径avi_file = f'{name}.avi'# 指定输出文件路径mp4_file = f'{name}.mp4'# 使用 VideoFileClip 加载 AVI 文件video = VideoFileClip(avi_file)# 将视频写入 MP4 文件video.write_videofile(mp4_file, codec="libx264")# 完成后释放资源video.close()# 删除原始的AVI文件os.remove(avi_file)def run():th = threading.Thread(target=video_record)th.start()with keyboard.Listener(on_press=on_press) as listener:listener.join()time.sleep(1) # 等待视频释放过后video_info()avi_2_mp4()if __name__ == '__main__':run()
效果图

相关文章:
python实现录屏功能
python实现录屏功能 将生成的avi文件转为mp4格式后删掉avi文件 参考感谢:https://www.cnblogs.com/peachh/p/16549254.html import os import cv2 import time import threading import numpy as np from PIL import ImageGrab from pynput import keyboard from da…...
酷克数据出席2024金融业数据库技术大会
10月16日,由中国金融电子化集团指导,北京金融信息化研究所主办的“2024金融业数据库技术大会”在京顺利召开。本次大会以“大模型时代下的数据库创新发展”为主题,汇聚了来自管理部门、金融机构、科技企业以及学术研究机构的众多专家学者&…...
find_library、pkg_check_modules、pkg_search_module的区别
在CMake中,find_library、pkg_check_modules和pkg_search_module是用于查找和使用库的三种不同命令。以下是具体介绍: find_library 功能:find_library用于查找指定的库文件(动态库或静态库),不依赖于库提供…...
多jdk版本环境下,jenkins系统设置需指定JAVA_HOME环境变量
一、背景 由于不同项目对jdk版本的要求不同,有些是要求jdk11,有些只需要jdk8即可。 而linux机器上安装jdk的方式又多种多样,最后导致jenkins打包到底使用的是哪个jdk,比较混乱。 1、java在哪 > whereis java java: /usr/bin/…...
Java mybatis day1015
ok了家人们,今天学习了mybatis这个框架,我们一起去看看吧 一.Mybatis简介 1.1 Mybatis概述 MyBatis 最初是 Apache 的一个开源项目 iBatis, 2010 年 6 月 这个项目由 Apache Software Foundation 迁移到了 Google Code 。随着开发团队转投 Google Cod…...
音乐播放器项目专栏介绍
1.简介 本专栏使用Qt QWidget作为显示界面,你将会学习到以下内容: 1.大量ui美化的实例。 2.各种复杂ui布局。 3.常见显示效果实现。 4.大量QSS实例。 5.Qt音频播放,音乐歌词文件加载,展示。 6.播放器界面换肤。 相信学习了本专栏…...
如何修改SpringBoot内置容器默认上下文
引言 默认情况下,Spring boot 应用程序通过上下文路径“/”访问,这是嵌入式服务器的默认设置,即我们可以直接通过http://localhost:8080/访问该应用程序。 但是在生产环境中部署 Spring Boot 应用程序时,指定上下文路径是一个常…...
R语言详解predict函数
R语言中predict函数在建立模型,研究关系时常用。但是不同type得到的结果常常被混为一谈,接下来,探讨predict得到的不同结果。 #数据 set.seed(123) n<-1000 age<-rnorm(n,mean50,sd10) gender<-rbinom(n,1,0.5) disease<-rbinom…...
QT 实现随机码验证
1.界面实现效果 以下是具体的项目需要用到的效果展示,用于验证字母。 2.简介 自定义CaptchaMovableLabel,继承自QLabel类: 中间的4个字母,就是CaptchaMovableLabel类来实例化的对象。 主要功能如下: 1.显示字母&am…...
集合框架12:Set集合概述、Set接口使用
视频链接:13.24 Set接口使用_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1zD4y1Q7Fw?spm_id_from333.788.videopod.episodes&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5&p24 1、Set集合概述 特点:无序、无下标,元素不可…...
如何打开荣耀手机的调试模式?
问题描述: 最近用荣耀手机进行测试,打开开发者选项,打开USB调试,在选择USB配置时,发现仅有选择USB以太网才可以连接Android Studio,也就是打开ADB调试模式。 但是,打开USB以太网后,…...
Meta新模型Dualformer:融合快慢思维,推理能力媲美人脑
Meta 的 FAIR 团队最近推出了一款名为 Dualformer 的全新 Transformer 模型,该模型模仿人类的双重认知系统,能够无缝整合快速和慢速推理模式,在推理能力和计算效率上取得了显著突破。 人类的思维过程通常被认为是由两种系统控制的:系统1快速…...
CDGA|数据治理:如何让传统行业实现数据智能
在当今这个数字化时代,数据已成为推动各行各业转型升级的关键力量。对于传统行业而言,如何从海量、复杂的数据中挖掘价值,实现“数据智能”,成为了提升竞争力、优化运营效率、创新业务模式的重要途径。本文将探讨数据治理如何助力…...
Spring源码5.2.9 编译踩坑
源码编译踩坑 拉取源码 我这块以5.2.9版本为例 spring-projects/spring-framework at v5.2.9.RELEASE (github.com) 版本分析 确定版本 这块将Gradle升级到了5.6.4 ,我们去官网下载即可 Gradle安装 Gradle | Releases 解压 将其解压到你想存放的文件夹 配置环…...
【前端】如何制作一个自己的网页(5)
上节课我们学习了以下知识: 1、网页中常见的文本元素,如标题元素与段落元素; 2、两个通用属性id与class; 3、元素的两种类型——块级元素与行内元素。 其实除了文本内容外,网页还可以包含图片、超链接等各类信息&a…...
Unity实战案例全解析 类宝可梦回合制的初级案例 源码分析(加了注释和流程图)
这是一个老教程了,但是对于没有写过回合制的初级程序同学来讲是比较适合的,也可以直接看源码,半小时内可以解决战斗 当然,我也没写过回合制系统所以就到处找,思路明白了就能自己修改了 视频教程 - 油管链接 Turn-Bas…...
AI绘图大模型 Stable Diffusion 使用详解
近年来,生成式 AI 技术,特别是 AI 绘图模型的进展令人瞩目。Stable Diffusion 是其中一款开源的大规模图像生成模型,它能够根据文本描述生成高质量的图像,支持从写实风格到卡通、幻想等各种不同的视觉效果。本文将深入介绍如何使用…...
es索引库操作和使用RestHignLevelClient客户端操作es
目录 es索引库操作 mapping映射操作 索引库的CURD操作 1.创建索引库和映射 编辑 2.查询索引库 3.删除索引库 4.修改索引库 5.总结 文档的CURD操作 1.新增文档 2.查询文档 3.删除文档 4.修改文档 全量修改 增量修改 5.总结 RestAPI 使用API例子 需要的数…...
安卓数据共享
在 Android 中,数据共享是指不同应用之间共享数据或同一应用不同组件之间共享数据的机制。SQLite 数据库、内容提供者(Content Provider)、共享偏好(Shared Preferences)和文件存储等方式可以实现数据共享。下面将详细…...
Gin框架操作指南02:JSON渲染
官方文档地址(中文):https://gin-gonic.com/zh-cn/docs/ 注:本教程采用工作区机制,所以一个项目下载了Gin框架,其余项目就无需重复下载,想了解的读者可阅读第一节:Gin操作指南&#…...
CPU性能优化框架:Cyber Engine Tweaks的线程调度优化技术解析与实践指南
CPU性能优化框架:Cyber Engine Tweaks的线程调度优化技术解析与实践指南 【免费下载链接】CyberEngineTweaks Cyberpunk 2077 tweaks, hacks and scripting framework 项目地址: https://gitcode.com/gh_mirrors/cy/CyberEngineTweaks 引言:夜之城…...
【AI理论学习】深入解析词向量训练:从CBOW到Skip-Gram的实战对比
1. 词向量基础:从One-hot到分布式表示 第一次接触词向量时,我和大多数人一样被各种术语绕晕了。直到用实际项目踩过坑才明白,词向量本质上就是让计算机"理解"词语含义的数学工具。想象你教小朋友认字,既可以通过死记硬背…...
Smart AM60 Armbian适配:从电视盒子到高性能服务器的蜕变之路
Smart AM60 Armbian适配:从电视盒子到高性能服务器的蜕变之路 【免费下载链接】amlogic-s9xxx-armbian Supports running Armbian on Amlogic, Allwinner, and Rockchip devices. Support a311d, s922x, s905x3, s905x2, s912, s905d, s905x, s905w, s905, s905l, r…...
3分钟搞定!BaiduPCS-Web免费解锁百度网盘满速下载终极方案
3分钟搞定!BaiduPCS-Web免费解锁百度网盘满速下载终极方案 【免费下载链接】baidupcs-web 项目地址: https://gitcode.com/gh_mirrors/ba/baidupcs-web 还在为百度网盘下载速度慢如蜗牛而烦恼吗?每次下载大文件都要等上几个小时甚至一整天&#…...
3大核心价值+5种应用场景:番茄小说下载器开源工具全解析
3大核心价值5种应用场景:番茄小说下载器开源工具全解析 【免费下载链接】Tomato-Novel-Downloader 番茄小说下载器不精简版 项目地址: https://gitcode.com/gh_mirrors/to/Tomato-Novel-Downloader 番茄小说下载器是一款基于Rust语言开发的开源工具ÿ…...
Cursor Pro免费激活终极指南:突破AI编程助手限制的完整技术方案
Cursor Pro免费激活终极指南:突破AI编程助手限制的完整技术方案 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reached…...
OpenClaw版本升级:无缝迁移Kimi-VL-A3B-Thinking对接配置
OpenClaw版本升级:无缝迁移Kimi-VL-A3B-Thinking对接配置 1. 升级前的准备工作 上周我在升级OpenClaw时遇到了一个棘手的问题——新版本与现有的Kimi-VL-A3B-Thinking模型对接出现了兼容性问题。这让我意识到,对于依赖特定模型服务的自动化工作流来说&…...
Win11轻量优化指南:自定义调校让系统流畅如初
Win11轻量优化指南:自定义调校让系统流畅如初 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter and customize …...
【C语言】C语言之数字金字塔进阶实战:从基础到复杂
1. 数字金字塔基础实现 第一次接触数字金字塔时,我被它整齐的排列方式深深吸引。这种通过数字构建的图形不仅美观,更是理解循环结构的绝佳案例。让我们从一个最基础的5层金字塔开始: #include<stdio.h> int main() {int n 5;for(int i…...
Win11Debloat终极指南:一键清理Windows系统,让电脑运行速度提升40%
Win11Debloat终极指南:一键清理Windows系统,让电脑运行速度提升40% 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other chan…...
