手把手教你使用opencv-python库制作屏幕录制工具(附源码)

本文介绍如何使用Python结合OpenCV库创建屏幕录制工具。内容包括使用PIL的ImageGrab截取屏幕,利用numpy和cv2处理图像,通过pynput监听键盘控制录制,以及保存为MP4视频的编码设置。最后提供了完整源码。
摘要由CSDN通过智能技术生成

目录

  • 目录

  • 应用平台

  • 屏幕录制部分

  • 计算视频最优fps及使用numpy计算中间帧数组

  • 使用pynput监听键盘按键

  • 如何保存MP4格式视频

  • 源码

  • 总结

最近有在使用屏幕录制软件录制桌面,在用的过程中突发奇想,使用python能不能做屏幕录制工具,也锻炼下自己的动手能力。接下准备写使用python如何做屏幕录制工具的系列文章:

  • 录制屏幕制作视频

  • 录制音频

  • 合成视频,音频

  • 基于pyqt5制作可视化窗口

大概上述四个部分,希望自己能够尽快完善,接下来开始使用python制作屏幕录制部分。

应用平台

  • windows 10

  • python 3.7

屏幕录制部分

屏幕录制可以简单地理解为将屏幕快照以动图的形式播放,这里我选用PIL下的ImageGrab来截取屏幕画面,首先
pip install Pillow
之后需要将截取到的快照数组合成为视频,使用cv2模块
pip install opencv-python
ImageGrab类不能直接存储为视频,使用numpy模块进行数组化,再通过cv2.COLOR_BGR2RGB转换为cv2色彩通道。
pip install numpy

屏幕录制主要代码:

import numpy as np
from PIL import ImageGrab
import cv2

im = ImageGrab.grab()
width, high = im.size  # 获取屏幕的宽和高
fourcc = cv2.VideoWriter_fourcc(*'I420')  # 设置视频编码格式
fps = 15  # 设置帧率
video = cv2.VideoWriter('test.avi', fourcc, fps, (width, high))
while True:  # 开始录制
    im = ImageGrab.grab()
    im_cv = cv2.cvtColor(np.array(im), cv2.COLOR_BGR2RGB)
    # 图像写入
    video.write(im_cv)
    if xx:  # 当某某条件满足中断循环
        break
video.release()  # 释放缓存,持久化视频

测试运行可以保存屏幕快照为视频,但操作起来不优雅,也不利于后续的操作。

封装成类,继承线程父类,方便使用键盘来控制视频录制的结束。

from threading import Thread

class ScreenshotVideo(Thread):

    def __init__(self):
     """初始化参数"""
        super().__init__()

详细代码将在文末给出。

计算视频最优fps及使用numpy计算中间帧数组

实际操作中视频录制在不同电脑中会出现不一样的帧率,

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值