Python实现屏幕录制功能的代码


Posted in Python onMarch 02, 2020

前段时间做视频时需要演示电脑端的操作,因此要用到屏幕录制,下载了个迅捷屏幕录制,但是没有vip录制的视频有水印且只能录制二分钟,于是鄙人想了下能不能通过万能的python来实现呢?经过一晚上的尝试发现这条路是可以走的通的。分享一下自己的想法,整体思路是PIL模块中的ImageGrab不停的获得当前屏幕,利用opencv写入视频流话不多说,直接上代码,有什么更好的建议,欢迎大家交流!

"""python + opencv 实现屏幕录制_by-_Zjh_"""
from PIL import ImageGrab
import numpy as np
import cv2
p = ImageGrab.grab()#获得当前屏幕
k=np.zeros((200,200),np.uint8)
a,b=p.size#获得当前屏幕的大小
fourcc = cv2.VideoWriter_fourcc(*'XVID')#编码格式
video = cv2.VideoWriter('test.avi', fourcc, 16, (a, b))#输出文件命名为test.mp4,帧率为16,可以自己设置
while True:
 im = ImageGrab.grab()
 imm=cv2.cvtColor(np.array(im), cv2.COLOR_RGB2BGR)#转为opencv的BGR格式
 video.write(imm)
 cv2.imshow('imm', k)
 if cv2.waitKey(1) & 0xFF == ord('q'):
  break
video.release()
cv2.destroyAllWindows()

在停止录制的时候我自己采用的是opencv的q键盘退出,实际上还是会有个黑框弹出来,如果有更好的退出录制方式请留下您的建议,本次还有个不足的地方是没有增加录制声音的功能。最近事情太多了,等放假了出一个完整版的GUI程序。好了今天就先到这了,快要考线性系统这门课了,得开始复习了

最近接触了 pynput 这个强大的三方库,可以全局监听键盘、鼠标事件。把以前的屏幕录制的程序改进一下!请忽略以前的程序,直接看这个!

"""
python 屏幕录制改进版,无opencv黑框显示!
@zhou 2020/1/29_
"""
from PIL import ImageGrab
import numpy as np
import cv2
import datetime
from pynput import keyboard
import threading
flag=False #停止标志位
def video_record():
 """
 屏幕录制!
 :return:
 """
 name = datetime.datetime.now().strftime('%Y-%m-%d %H-%M-%S') #当前的时间
 p = ImageGrab.grab() # 获得当前屏幕
 a, b = p.size # 获得当前屏幕的大小
 fourcc = cv2.VideoWriter_fourcc(*'XVID') # 编码格式
 video = cv2.VideoWriter('%s.avi'%name, fourcc, 20, (a, b)) # 输出文件命名为test.mp4,帧率为16,可以自己设置
 while True:
  im = ImageGrab.grab()
  imm=cv2.cvtColor(np.array(im), cv2.COLOR_RGB2BGR)#转为opencv的BGR格式
  video.write(imm)
  if flag:
   print("录制结束!")
   break
 video.release()
def on_press(key):
 """
 键盘监听事件!!!
 :param key:
 :return:
 """
 #print(key)
 global flag
 if key == keyboard.Key.esc:
  flag=True
  print("stop monitor!")
  return False #返回False,键盘监听结束!
if __name__=='__main__':
 th=threading.Thread(target=video_record)
 th.start()
 with keyboard.Listener(on_press=on_press) as listener:
  listener.join()

现在录制就不用之前那个黑框了,按 esc按键 直接停止录制!

PS:在通过代码给大家介绍下python 实现屏幕录制

PIL 即pollow 的安装命令如下:

pip install pillow

其中cv2的安装是下面这条命令

pip install opencv-python

代码实现:

# coding: utf-8
from PIL import ImageGrab
import numpy as np
import cv2
fps = 20
start = 3 # 延时录制
end = 15 # 自动结束时间
curScreen = ImageGrab.grab() # 获取屏幕对象
height, width = curScreen.size
video = cv2.VideoWriter('video02.avi', cv2.VideoWriter_fourcc(*'XVID'), fps, (height, width))
imageNum = 0
while True:
  imageNum += 1
  captureImage = ImageGrab.grab() # 抓取屏幕
  frame = cv2.cvtColor(np.array(captureImage), cv2.COLOR_RGB2BGR)
  # 显示无图像的窗口
  cv2.imshow('capturing', np.zeros((1, 255), np.uint8))
  # 控制窗口显示位置,方便通过按键方式退出
  cv2.moveWindow('capturing', height - 100, width - 100) 
  if imageNum > fps * start:
    video.write(frame)
  # 退出条件  
  if cv2.waitKey(50) == ord('q') or imageNum > fps * end:
    break
video.release()
cv2.destroyAllWindows()

总结

到此这篇关于Python实现屏幕录制功能的文章就介绍到这了,更多相关python 屏幕录制内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python 测试实现方法
Dec 24 Python
Python使用functools实现注解同步方法
Feb 06 Python
python3第三方爬虫库BeautifulSoup4安装教程
Jun 19 Python
详解Django中六个常用的自定义装饰器
Jul 04 Python
mac PyCharm添加Python解释器及添加package路径的方法
Oct 29 Python
python批量下载网站马拉松照片的完整步骤
Dec 05 Python
pandas 把数据写入txt文件每行固定写入一定数量的值方法
Dec 28 Python
深入理解Python异常处理的哲学
Feb 01 Python
Django后台admin的使用详解
Jul 08 Python
django中forms组件的使用与注意
Jul 08 Python
使用python将最新的测试报告以附件的形式发到指定邮箱
Sep 20 Python
python 协程中的迭代器,生成器原理及应用实例详解
Oct 28 Python
python实现录屏功能(亲测好用)
Mar 02 #Python
基于Numba提高python运行效率过程解析
Mar 02 #Python
Python3 assert断言实现原理解析
Mar 02 #Python
Django认证系统user对象实现过程解析
Mar 02 #Python
在python中使用pymysql往mysql数据库中插入(insert)数据实例
Mar 02 #Python
Python基于requests库爬取网站信息
Mar 02 #Python
使用python3 实现插入数据到mysql
Mar 02 #Python
You might like
第二节 对象模型 [2]
2006/10/09 PHP
PHP新手上路(五)
2006/10/09 PHP
dedecms防止FCK乱格式化你的代码的修改方法
2007/03/17 PHP
php中$_SERVER[PHP_SELF] 和 $_SERVER[SCRIPT_NAME]之间的区别
2009/09/05 PHP
限制ckeditor上传图片文件大小的方法
2013/11/15 PHP
PHP获取文件的MD5值并判断是否被修改的例子
2014/06/19 PHP
php给一组指定关键词添加span标签的方法
2015/03/31 PHP
javascript得到XML某节点的子节点个数的脚本
2008/10/11 Javascript
javascript 动态添加事件代码
2008/11/30 Javascript
基于MooTools的很有创意的滚动条时钟动画
2010/11/14 Javascript
疯狂Jquery第一天(Jquery学习笔记)
2012/05/11 Javascript
使用insertAfter()方法在现有元素后添加一个新元素
2014/05/28 Javascript
jQuery实现TAB选项卡切换特效简单演示
2016/03/04 Javascript
JS中JSON对象和String之间的互转及处理技巧
2016/04/06 Javascript
基于JavaScript实现轮播图代码
2016/07/14 Javascript
jQuery 遍历map()方法详解
2016/11/04 Javascript
JS中静态页面实现微信分享功能
2017/02/06 Javascript
webpack学习笔记之代码分割和按需加载的实例详解
2017/07/20 Javascript
Vue.js实现可配置的登录表单代码详解
2018/03/29 Javascript
Vue自定义指令封装节流函数的方法示例
2018/07/09 Javascript
vue项目搭建以及全家桶的使用详细教程(小结)
2018/12/19 Javascript
jQuery实现鼠标滑动切换图片
2020/05/27 jQuery
JavaScript之scrollTop、scrollHeight、offsetTop、offsetHeight等属性学习笔记
2020/07/15 Javascript
python通过cookie模拟已登录状态的初步研究
2016/11/09 Python
Python批量提取PDF文件中文本的脚本
2018/03/14 Python
Python爬虫常用小技巧之设置代理IP
2018/09/13 Python
关于Numpy中的行向量和列向量详解
2019/11/30 Python
如何用Python 加密文件
2020/09/10 Python
您的健身减肥和健康饮食专家:vitafy
2017/06/06 全球购物
Easy Spirit官网:美国休闲鞋履中的代表品牌
2019/04/12 全球购物
生物技术专业毕业生求职信范文
2013/12/14 职场文书
学校门卫管理制度
2014/01/30 职场文书
教师正风肃纪剖析材料
2014/10/20 职场文书
小学四年级作文之人物作文
2019/11/06 职场文书
Mysql如何实现不存在则插入,存在则更新
2022/03/25 MySQL
SpringBoot详解整合Redis缓存方法
2022/07/15 Java/Android