Python做屏幕录制工具的实现示例

目录
  • 思路
  • 实现
    • 录制
    • 监听键盘事件
    • 主体控制
    • 视频信息

女朋友是一个软件测试人员,在工作中经常会遇到需要录屏记录自己操作,方便后续开发同学定位。因为录屏软件动不动就开始收费,所以她经常更换录屏软件。闲暇之余,我就觉得手痒,感觉可以用万能的 Python 来解决她的烦恼。

思路

我上网搜寻了一下相关知识,录制视频基本上都用的图像处理库 PIL 的 ImageGrab 模块。这个模块可以用于将当前屏幕的内容或者剪贴板上的内容拷贝到 PIL 图像内存。
既然这个模块可以获取当前屏幕上的内容,那么我一直不间断地获取,然后把这些获取的内容拼起来,那不就是视频了吗?

实现

录制

整体思路是 PIL 模块中的 ImageGrab 不停的获得当前屏幕,利用 opencv 写入视频流。

def video_record(sttime):
    global name
    # 当前的时间(当文件名)
    name = datetime.now().strftime('%Y-%m-%d %H-%M-%S')
    # 获取当前屏幕
    screen = ImageGrab.grab()
    # 获取当前屏幕的大小
    width, high = screen.size
    # MPEG-4编码,文件后缀可为.avi .asf .mov等
    fourcc = VideoWriter_fourcc('X', 'V', 'I', 'D')
    # (文件名,编码器,帧率,视频宽高)
    video = VideoWriter('%s.avi' % name, fourcc, 15, (width, high))
    print(str(sttime) + '秒后开始录制----')
    time.sleep(int(sttime))
    print('开始录制!')
    global start_time
    start_time = time.time()
    while True:
        if flag:
            print("录制结束!")
            global final_time
            final_time = time.time()
            # 释放
            video.release()
            break
        # 图片为RGB模式
        im = ImageGrab.grab()
        # 转为opencv的BGR模式
        imm = cvtColor(np.array(im), COLOR_RGB2BGR)
        # 写入
        video.write(imm)

录制视频的主要代码只需几行即可,但是我们需要对录制操作进行控制,例如开始录制、结束录制等。以及获取屏幕内容之后,需要对内容进行转码,然后写入视频流。

监听键盘事件

录制视频我们是使用的一个 while 循环来获取屏幕信息,开始之后会一直进行。但是我们需要监听键盘事件,来终止这个循环,从而终止录制视频。这个监听事件就显得很重要了,这里采用的是 pynput 这个强大的三方库,可以全局监听键盘、鼠标事件。

我们设定的是用户在按下键盘的 ESC 按键后,终止 while 循环,从而终止视频录制。

# 监听按键
def on_press(key):
    global flag
    if key == keyboard.Key.esc:
        flag = True
        # 返回False,键盘监听结束!
        return False

主体控制

因为我们需要不断地获取屏幕内容,所以我们最好启动一个线程来干这个事情。

th = threading.Thread(target=video_record, args=sstime)
    th.start()
    with keyboard.Listener(on_press=on_press) as listener:
        listener.join()

视频信息

录制视频结束之后,我们也可以获取视频的一些相关信息,例如时长、帧率、分辨率等。

# 视频信息
def video_info():
    # 记得文件名加格式不要错!
    video = VideoCapture('%s.avi' % name)
    fps = video.get(CAP_PROP_FPS)
    count = video.get(CAP_PROP_FRAME_COUNT)
    size = (int(video.get(CAP_PROP_FRAME_WIDTH)), int(video.get(CAP_PROP_FRAME_HEIGHT)))
    print('帧率=%.1f' % fps)
    print('帧数=%.1f' % count)
    print('分辨率', size)
    print('视频时间=%.3f秒' % (int(count) / fps))
    print('录制时间=%.3f秒' % (final_time - start_time))
    print('推荐帧率=%.2f' % (fps * ((int(count) / fps) / (final_time - start_time))))

到此这篇关于Python做屏幕录制工具的实现示例的文章就介绍到这了,更多相关Python 屏幕录制工具内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 基于Python+OpenCV制作屏幕录制工具

    目录 应用平台 屏幕录制部分 计算视频最优fps及使用numpy计算中间帧数组 使用pynput监听键盘按键 如何保存MP4格式视频 源码 总结 最近有在使用屏幕录制软件录制桌面,在用的过程中突发奇想,使用python能不能做屏幕录制工具,也锻炼下自己的动手能力.接下准备写使用python如何做屏幕录制工具的系列文章: 录制屏幕制作视频 录制音频 合成视频,音频 基于pyqt5制作可视化窗口 大概上述四个部分,希望自己能够尽快完善,接下来开始使用python制作屏幕录制部分. 应用平台 wind

  • Python+opencv+pyaudio实现带声音屏幕录制

    基于个人的爱好和现实的需求,决定用Python做一个屏幕录制的脚本.因为要看一些加密的视频,每次都要登录,特别麻烦,遂决定用自己写的脚本,将加密视频的播放过程全程录制下来,这样以后看自己的录播就好了.结合近期自己学习的内容,正好用Python来练练手,巩固自己的学习效果. 经过多番搜索,决定采用Python+opencv+pyaudio来实现屏幕录制.网上搜索到的录屏,基本都是不带声音的,而我要实现的是带声音的屏幕录制.下面就开始一步一步的实现吧. 声音录制 import pyaudio imp

  • 只用20行Python代码实现屏幕录制功能

    一.模块安装 首先,我们需要用到两个python的两个模块,win32gui和PyQt5 1.pip install win32gui 2.pip install PyQt5 1.pip install win32gui PS C:\Users\lex\Desktop> pip install win32gui Looking in indexes: http://mirrors.aliyun.com/pypi/simple Requirement already satisfied: win3

  • 使用Python来做一个屏幕录制工具的操作代码

    一.写在前面 作为一名测试,有时候经常会遇到需要录屏记录自己操作,方便后续开发同学定位.以前都是用ScreenToGif来录屏制作成动态图,偶尔的机会看到python也能实现.那就赶紧学习下. 二.效果展示 三.知识串讲 这次要讲的东西可能比较多了,涉及到pyqt5 GUI软件的制作.QThread多线程的使用.Sikuli库的图形操作.win32库的模拟键盘操作.cv2库的写视频文件等.下面我们一点点来蚕食我这次写的代码. 1.GUI界面制作 这次我用的是现成的Pyqt5界面布局类,QVBox

  • 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,

  • Python实现屏幕录制功能的代码

    前段时间做视频时需要演示电脑端的操作,因此要用到屏幕录制,下载了个迅捷屏幕录制,但是没有vip录制的视频有水印且只能录制二分钟,于是鄙人想了下能不能通过万能的python来实现呢?经过一晚上的尝试发现这条路是可以走的通的.分享一下自己的想法,整体思路是PIL模块中的ImageGrab不停的获得当前屏幕,利用opencv写入视频流话不多说,直接上代码,有什么更好的建议,欢迎大家交流! """python + opencv 实现屏幕录制_by-_Zjh_""&

  • Python做屏幕录制工具的实现示例

    目录 思路 实现 录制 监听键盘事件 主体控制 视频信息 女朋友是一个软件测试人员,在工作中经常会遇到需要录屏记录自己操作,方便后续开发同学定位.因为录屏软件动不动就开始收费,所以她经常更换录屏软件.闲暇之余,我就觉得手痒,感觉可以用万能的 Python 来解决她的烦恼. 思路 我上网搜寻了一下相关知识,录制视频基本上都用的图像处理库 PIL 的 ImageGrab 模块.这个模块可以用于将当前屏幕的内容或者剪贴板上的内容拷贝到 PIL 图像内存.既然这个模块可以获取当前屏幕上的内容,那么我一直

  • Python实现屏幕代码雨效果的示例代码

    直接上代码 import pygame import random def main(): # 初始化pygame pygame.init() # 默认不全屏 fullscreen = False # 窗口未全屏宽和高 WIDTH, HEIGHT = 1100, 600 init_width, init_height = WIDTH, HEIGHT # 字块大小,宽,高 suface_height = 18 # 字体大小 font_size = 20 # 创建一个窗口 screen = pyga

  • 使用Pyqt5制作屏幕录制界面功能

    目录 应用平台 窗口设置 主体窗口代码 划选窗口代码 总结 最近有在使用屏幕录制软件录制桌面,在用的过程中突发奇想,使用python能不能做屏幕录制工具,也锻炼下自己的动手能力.接下准备写使用python如何做屏幕录制工具的系列文章: 录制屏幕制作视频 录制音频 合成视频,音频 基于pyqt5制作可视化窗口 大概上述四个部分,希望自己能够尽快完善,前两篇文章分享了利用opencv制作了屏幕录制部分,利用PyAudio录制音频,本篇文章分享如何使用ffmpeg将同时录制的屏幕录像和音频合成为有声音

  • 利用Python编写简易的录制屏幕小工具

    目录 1.准备 2.代码 由于最近测试需要录制系统界面的操作过程,因为都是全屏的操作,所以用python做一个简单的录屏小工具. 实现过程也是比较简单,就是通过对屏幕操作进行不断的截图,最后将截图合成一个操作视频的过程.由于我们只是做简单的截屏功能,并没有加入音频效果. 1.准备 开始之前我们还是按照以往的方式介绍一下使用到的第三方的python模块. from PIL import ImageGrab import numpy as np import cv2 import datetime

  • python调用ffmpeg命令行工具便捷操作视频示例实现过程

    目录 最重要的事 裁剪视频 计算分段 获取视频长度 分段 获取文件 代码集成 总结 参考资料 文 | 李晓飞 来源:Python 技术「ID: pythonall」 最近有了一个新任务,需要将赛事视频,拆分成两分钟以内的小段,用于发布到短视频平台上. 本以为是个一次性的工作,结果赛事视频数据巨大,视频文件长短不一,完全没法手工处理,于是 Python 又一次拯救了我. 还等什么,开始干吧! 最重要的事 无论做什么事情,都要去分析一下最重要的是什么,然后集中精力攻克,再继续找最重要的事. 对我们这

随机推荐