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抓取模板之家的CSS模板
Mar 16 Python
Python实现堆排序的方法详解
May 03 Python
Windows中安装使用Virtualenv来创建独立Python环境
May 31 Python
python操作mysql代码总结
Jun 01 Python
对Python3之进程池与回调函数的实例详解
Jan 22 Python
Python使用itchat 功能分析微信好友性别和位置
Aug 05 Python
python使用bs4爬取boss直聘静态页面
Oct 10 Python
Python+OpenCV检测灯光亮点的实现方法
Nov 02 Python
Python3.8.2安装包及安装教程图文详解(附安装包)
Nov 28 Python
Python控制鼠标键盘代码实例
Dec 08 Python
python 基于PYMYSQL使用MYSQL数据库
Dec 24 Python
python 批量将中文名转换为拼音
Feb 07 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
火车头discuz6.1 完美采集的php接口文件
2009/09/13 PHP
解析PHP中的内存管理,PHP动态分配和释放内存
2013/06/28 PHP
PHP获取指定函数定义在哪个文件中以及其所在的行号实例
2014/05/08 PHP
PHP中开启gzip压缩的2种方法
2015/01/31 PHP
写给想学习Javascript的朋友一点学习经验小结
2010/11/23 Javascript
基于jquery实现的上传图片及图片大小验证、图片预览效果代码
2011/04/12 Javascript
jQuery模拟点击A标记示例参考
2014/04/17 Javascript
js语法学习之判断一个对象是否为数组
2014/05/13 Javascript
Node.js项目中调用JavaScript的EJS模板库的方法
2016/03/11 Javascript
通过隐藏iframe实现无刷新上传文件操作
2016/03/16 Javascript
Bootstrap Paginator分页插件使用方法详解
2016/05/30 Javascript
利用Node.JS实现邮件发送功能
2016/10/21 Javascript
js实现文字选中分享功能
2017/01/25 Javascript
JQuery实现定时刷新功能代码
2017/05/09 jQuery
Angular.JS中的this指向详解
2017/05/17 Javascript
vue中计算属性(computed)、methods和watched之间的区别
2017/07/27 Javascript
node作为中间服务层如何发送请求(发送请求的实现方法详解)
2018/01/02 Javascript
JS实现的合并多个数组去重算法示例
2018/04/11 Javascript
解决微信小程序云开发中获取数据库的内容为空的方法
2019/05/15 Javascript
解决一个微信号同时支持多个环境网页授权问题
2019/08/07 Javascript
[30:00]完美世界DOTA2联赛PWL S2 Rebirth vs LBZS 第二场 11.28
2020/12/01 DOTA
Django 如何获取前端发送的头文件详解(推荐)
2017/08/15 Python
Python数据分析库pandas基本操作方法
2018/04/08 Python
解决Python 中英文混输格式对齐的问题
2018/07/16 Python
numpy向空的二维数组中添加元素的方法
2018/11/01 Python
Python类中方法getitem和getattr详解
2019/08/30 Python
python调用HEG工具批量处理MODIS数据的方法及注意事项
2020/02/18 Python
Python日期格式和字符串格式相互转换的方法
2020/02/18 Python
VICHY薇姿美国官方网站:欧洲药房第一的抗衰老品牌
2017/11/22 全球购物
优秀纪检干部材料
2014/08/27 职场文书
大学生迟到检讨书500字
2014/10/17 职场文书
党性分析材料格式
2014/12/19 职场文书
行政主管岗位职责
2015/02/03 职场文书
2016大学迎新欢迎词
2015/09/29 职场文书
2016中学教师读书心得体会
2016/01/13 职场文书
如何使用Python实现一个简易的ORM模型
2021/05/12 Python