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中函数的用法实例教程
Sep 08 Python
python中常用检测字符串相关函数汇总
Apr 15 Python
python实现从ftp服务器下载文件的方法
Apr 30 Python
python编程嵌套函数实例代码
Feb 11 Python
python3使用QQ邮箱发送邮件
May 20 Python
Python实现的读取文件内容并写入其他文件操作示例
Apr 09 Python
Python实现字符型图片验证码识别完整过程详解
May 10 Python
解决python多行注释引发缩进错误的问题
Aug 23 Python
python+requests接口压力测试500次,查看响应时间的实例
Apr 30 Python
记一次Django响应超慢的解决过程
Sep 17 Python
详解vscode实现远程linux服务器上Python开发
Nov 10 Python
pytorch Dropout过拟合的操作
May 27 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
利用static实现表格的颜色隔行显示
2006/10/09 PHP
PHP数字和字符串ID互转函数(类似优酷ID)
2014/06/30 PHP
PHP中使用数组指针函数操作数组示例
2014/11/19 PHP
关于php中一些字符串总结
2016/05/05 PHP
iis 7下安装laravel 5.4环境的方法教程
2017/06/14 PHP
php中html_entity_decode实现HTML实体转义
2018/06/13 PHP
php使用redis的几种常见操作方式和用法示例
2020/02/20 PHP
超酷的网页音乐播放器DewPlayer使用方法
2010/12/18 Javascript
基于jquery的多彩百分比 动态进度条 投票效果显示效果实现代码
2011/08/28 Javascript
五段实用的js高级技巧
2011/12/20 Javascript
jquery入门—数据删除与隔行变色以及图片预览
2013/01/07 Javascript
轻松创建nodejs服务器(6):作出响应
2014/12/18 NodeJs
JavaScript中的方法调用详细介绍
2014/12/30 Javascript
JavaScript中document对象使用详解
2015/01/06 Javascript
nodejs个人博客开发第五步 分配数据
2017/04/12 NodeJs
Angular学习笔记之集成三方UI框架、控件的示例
2018/03/23 Javascript
JavaScript实现京东购物放大镜和选项卡效果的方法分析
2018/07/05 Javascript
JS开发常用工具函数(小结)
2019/07/04 Javascript
JavaScript实现简单的图片切换功能(实例代码)
2020/04/10 Javascript
[30:51]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#1Liquid VS MVP.Phx第一局
2016/03/04 DOTA
举例详解Python中循环语句的嵌套使用
2015/05/14 Python
python使用xmlrpclib模块实现对百度google的ping功能
2015/06/02 Python
python用Pygal如何生成漂亮的SVG图像详解
2017/02/10 Python
python 调用win32pai 操作cmd的方法
2017/05/28 Python
python事件驱动event实现详解
2018/11/21 Python
python正则表达式匹配[]中间为任意字符的实例
2018/12/25 Python
django框架cookie和session用法实例详解
2019/12/10 Python
Python中内建模块collections如何使用
2020/05/27 Python
Python监听键盘和鼠标事件的示例代码
2020/11/18 Python
python实现马丁策略的实例详解
2021/01/15 Python
小学教师学期末自我评价
2013/09/25 职场文书
党校自我鉴定范文
2013/10/02 职场文书
新员工试用期自我鉴定
2014/04/17 职场文书
关于安全的广播稿
2014/10/23 职场文书
全国法院系统开展党的群众路线教育实践活动综述(全文)
2014/10/25 职场文书
MySQL中连接查询和子查询的问题
2021/09/04 MySQL