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 相关文章推荐
两个命令把 Vim 打造成 Python IDE的方法
Mar 20 Python
python中快速进行多个字符替换的方法小结
Dec 15 Python
python自动发邮件库yagmail的示例代码
Feb 23 Python
python 将print输出的内容保存到txt文件中
Jul 17 Python
python如何实现视频转代码视频
Jun 17 Python
python UDP(udp)协议发送和接收的实例
Jul 22 Python
Python实现SMTP邮件发送
Jun 16 Python
Python连接mysql数据库及简单增删改查操作示例代码
Aug 03 Python
Python面向对象特殊属性及方法解析
Sep 16 Python
python 线程的五个状态
Sep 22 Python
Pycharm配置autopep8实现流程解析
Nov 28 Python
python中print格式化输出的问题
Apr 16 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中使用Oracle数据库(3)
2006/10/09 PHP
PHP之autoload运行机制实例分析
2014/08/28 PHP
php中chdir()函数用法实例
2014/11/13 PHP
PHP用函数嵌入网站访问量计数器
2017/10/27 PHP
PHP实现将多个文件压缩成zip格式并下载到本地的方法示例
2018/05/23 PHP
jQuery Ajax 全解析
2009/02/08 Javascript
jQuery Ajax之load()方法
2009/10/12 Javascript
jquery获取div距离窗口和父级dv的距离示例
2013/10/10 Javascript
JavaScript中for-in遍历方式示例介绍
2014/02/11 Javascript
自己用jQuery写了一个图片的马赛克消失效果
2014/05/04 Javascript
jquery实现个人中心导航菜单效果和美观都非常不错
2014/09/02 Javascript
jQuery中eq()方法用法实例
2015/01/05 Javascript
js中javascript:void(0) 真正含义
2020/11/05 Javascript
JQuery插件Marquee.js实现无缝滚动效果
2016/04/26 Javascript
scroll事件实现监控滚动条并分页显示(zepto.js)
2016/12/18 Javascript
Bootstrap3 多选和单选框(checkbox)
2016/12/29 Javascript
jQuery Ajax全解析
2017/02/13 Javascript
js时间查询插件使用详解
2017/04/07 Javascript
JavaScript实现打地鼠小游戏
2020/04/23 Javascript
js监听html页面的上下滚动事件方法
2018/09/11 Javascript
详解react阻止无效重渲染的多种方式
2018/12/11 Javascript
Vue项目使用localStorage+Vuex保存用户登录信息
2019/05/27 Javascript
Python实现批量把SVG格式转成png、pdf格式的代码分享
2014/08/21 Python
Python下的subprocess模块的入门指引
2015/04/16 Python
通过python顺序修改文件名字的方法
2018/07/11 Python
Python面向对象程序设计示例小结
2019/01/30 Python
python实现桌面气泡提示功能
2019/07/29 Python
Python利用逻辑回归分类实现模板
2020/02/15 Python
俄罗斯设计师家具购物网站:The Furnish
2019/12/01 全球购物
会计自我鉴定范文
2013/10/06 职场文书
周年庆典主持词
2014/04/02 职场文书
2014离婚协议书范文
2014/09/10 职场文书
工作时间调整通知
2015/04/24 职场文书
教育读书笔记
2015/07/02 职场文书
2015初中政治教学工作总结
2015/07/21 职场文书
Python time库的时间时钟处理
2021/05/02 Python