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语言的12个基础知识点小结
Jul 10 Python
用Python计算三角函数之atan()方法的使用
May 15 Python
快速排序的算法思想及Python版快速排序的实现示例
Jul 02 Python
python中字符串类型json操作的注意事项
May 02 Python
Python API自动化框架总结
Nov 12 Python
Win下PyInstaller 安装和使用教程
Dec 25 Python
python数据预处理 :样本分布不均的解决(过采样和欠采样)
Feb 29 Python
python连接mysql有哪些方法
Jun 24 Python
python 实现围棋游戏(纯tkinter gui)
Nov 13 Python
最新PyCharm 2020.2.3永久激活码(亲测有效)
Nov 26 Python
基于Python的接口自动化读写excel文件的方法
Jan 15 Python
详解Python requests模块
Jun 21 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
PHP中session变量的销毁
2014/02/27 PHP
Laravel框架基于ajax和layer.js实现无刷新删除功能示例
2019/01/17 PHP
表单元素事件 (Form Element Events)
2009/07/17 Javascript
避免回车键导致的页面无意义刷新的解决方法
2011/04/12 Javascript
使用jquery自定义鼠标样式满足个性需求
2013/11/05 Javascript
JavaScript实现的使用键盘控制人物走动实例
2014/08/27 Javascript
javascript伸缩型菜单实现代码
2015/11/16 Javascript
基于javascript实现样式清新图片轮播特效
2016/03/30 Javascript
js实现上传图片及时预览
2016/05/07 Javascript
AngularJS利用Controller完成URL跳转
2016/08/09 Javascript
Angular中使用ui router实现系统权限控制及开发遇到问题
2016/09/23 Javascript
JavaScript 继承详解(六)
2016/10/11 Javascript
Angular实现表单验证功能
2017/11/13 Javascript
nodeJs爬虫的技术点总结
2018/05/13 NodeJs
Vuex,iView UI面包屑导航使用扩展详解
2019/11/04 Javascript
如何在JS文件中获取Vue组件
2020/09/16 Javascript
Python实现约瑟夫环问题的方法
2016/05/03 Python
python OpenCV学习笔记实现二维直方图
2018/02/08 Python
Python基于FTP模块实现ftp文件上传操作示例
2018/04/23 Python
python删除不需要的python文件方法
2018/04/24 Python
Numpy 改变数组维度的几种方法小结
2018/08/02 Python
用python的turtle模块实现给女票画个小心心
2019/11/23 Python
Python-openCV读RGB通道图实例
2020/01/17 Python
python实现字符串和数字拼接
2020/03/02 Python
canvas实现俄罗斯方块的方法示例
2018/12/13 HTML / CSS
SheIn沙特阿拉伯:女装在线
2020/03/23 全球购物
巴西网上药店:Drogaria Araujo
2021/01/06 全球购物
学生党员的自我评价范文
2014/03/01 职场文书
赞美老师的演讲稿
2014/05/22 职场文书
争先创优活动总结
2014/08/27 职场文书
工作作风建设心得体会
2014/10/22 职场文书
2014年底个人工作总结
2015/03/10 职场文书
营运督导岗位职责
2015/04/10 职场文书
如何在CocosCreator里画个炫酷的雷达图
2021/04/16 Javascript
在HTML5 localStorage中存储对象的示例代码
2021/04/21 Javascript
Matplotlib可视化之添加让统计图变得简单易懂的注释
2021/06/11 Python