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用ConfigObj读写配置文件的实现代码
Mar 04 Python
Python连接MySQL并使用fetchall()方法过滤特殊字符
Mar 13 Python
深入浅析python定时杀进程
Jun 06 Python
全面了解Python环境配置及项目建立
Jun 30 Python
Python实现希尔排序算法的原理与用法实例分析
Nov 23 Python
浅谈python可视化包Bokeh
Feb 07 Python
教你利用Python玩转histogram直方图的五种方法
Jul 30 Python
使用memory_profiler监测python代码运行时内存消耗方法
Dec 03 Python
浅谈Python中的全局锁(GIL)问题
Jan 11 Python
Python逐行读取文件中内容的简单方法
Feb 26 Python
与Django结合利用模型对上传图片预测的实例详解
Aug 07 Python
如何使用flask将模型部署为服务
May 13 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
PHPLog php 程序调试追踪工具
2009/09/09 PHP
php实现的mysqldb读写分离操作类示例
2017/02/07 PHP
Laravel框架实现修改登录和注册接口数据返回格式的方法
2018/08/17 PHP
thinkPHP5.1框架使用SemanticUI实现分页功能示例
2019/08/03 PHP
PHP连续签到功能实现方法详解
2019/12/04 PHP
jQuery 全选效果实现代码
2009/03/23 Javascript
ext jquery 简单比较
2010/04/07 Javascript
ajax更新数据后,jquery、jq失效问题
2011/03/16 Javascript
nodejs之请求路由概述
2014/07/05 NodeJs
jQuery 中DOM 操作详解
2015/01/13 Javascript
js动态切换图片的方法
2015/01/20 Javascript
javascript转换日期字符串为Date日期对象的方法
2015/02/13 Javascript
JavaScript将数字转换成大写中文的方法
2015/03/23 Javascript
在JavaScript中使用JSON数据
2016/02/15 Javascript
jQuery 如何给Carousel插件添加新的功能
2016/04/18 Javascript
基于BootStrap Metronic开发框架经验小结【六】对话框及提示框的处理和优化
2016/05/12 Javascript
javascript动画之模拟拖拽效果篇
2016/09/26 Javascript
关于Vue.js 2.0的Vuex 2.0 你需要更新的知识库
2016/11/30 Javascript
vue实现消息的无缝滚动效果的示例代码
2017/12/05 Javascript
详解vue.js之props传递参数
2017/12/12 Javascript
JavaScript高级函数应用之分时函数实例分析
2018/08/03 Javascript
浅谈Vue.set实际上是什么
2019/10/17 Javascript
Python实现计算文件夹下.h和.cpp文件的总行数
2015/04/23 Python
Python程序员面试题 你必须提前准备!(答案及解析)
2018/01/23 Python
Python模块搜索路径代码详解
2018/01/29 Python
python如何实现一个刷网页小程序
2018/11/27 Python
Django框架序列化与反序列化操作详解
2019/11/01 Python
解决tensorflow训练时内存持续增加并占满的问题
2020/01/19 Python
全球性的奢侈品梦工厂:Forzieri(福喜利)
2019/02/20 全球购物
澳大利亚领先的内衣店:Bendon Lingerie澳大利亚
2020/05/15 全球购物
Solaris操作系统的线程机制
2012/12/23 面试题
新郎父亲婚宴答谢词
2014/01/11 职场文书
《得道多助,失道寡助》教学反思
2014/04/19 职场文书
镇人大副主席民主生活会对照检查材料思想汇报
2014/10/01 职场文书
Python中Matplotlib的点、线形状、颜色以及绘制散点图
2022/04/07 Python
面试官问我Mysql的存储引擎了解多少
2022/08/05 MySQL