经验分享-如何用python 和cv2 实现电脑录屏功能-好用!!

如何用python 和cv2 实现电脑录屏功能-好用!!

本文主要讲解如何用python实现录频功能,主要用到的库 PIL,numpy ,cv2。
是亲测好用哦!
对大家的工作或学习具有一定的参考借鉴价值,需要的朋友可以参考下

背景

需要录屏·监控程序的运行过程,以直观的发现错误原因

首先需要创建录频组件代码,如下:
用的是python结合从cv2实现截图然后保存到文件实现视频流。

screen_recode.py


"""
python 屏幕录制
by:一岚大霞

"""



from PIL import ImageGrab
import numpy as np
import cv2
import datetime
import time
import os
from parse import ReadConf

conf = ReadConf()

class ScreenVideoControl(object):
    def __init__(self, save_dir ):
        self.fps = 25  # 帧率为25,可以调节
        self.start_time = time.time()
        #self.save_day =20
        self.save_dir = save_dir
        self.screen_file_path = None
        self.get_video_path()
        self.video = cv2.VideoWriter(self.screen_file_path, cv2.VideoWriter_fourcc(*'XVID'), self.fps,
                                     ImageGrab.grab().size)

    def run(self):
        # 设置运行开始标志 FLAG=true则为结束录频
        conf.write_or_update_value('conf', "FLAG", 'False')
        # 最长录制时间
        time_delay = 60.0  # 秒 可设置
        self.video_record(time_delay)
        #self.remove_path_file()

    def video_record(self, time_delay):
        print("screen record is doing........")
        print('---录屏已经开始了--')
        while True:
            im = ImageGrab.grab()
            imm = cv2.cvtColor(np.array(im), cv2.COLOR_RGB2BGR)  # 转为opencv的BGR格式
            self.video.write(imm)
            now_time = time.time()
            delay = now_time - self.start_time
            if delay >= time_delay:
                print("---超过指定时间,录制结束!---")
                break
            elif self.end_process():
                print("---程序结束,录制结束!---")
                break
        self.video.release()
        cv2.destroyAllWindows()

    # 判断是否结束
    def end_process(self):
        flag = conf.get_value("conf", 'FLAG')
        if flag == 'False' or flag == "false":
            return False
        else:
            return True

    def get_video_path(self):
        # 录屏保存的文件目录路径
        if not os.path.exists(self.save_dir):
            os.makedirs(self.save_dir)
        # 得到录屏保存的文件路径 按照时间创建文件夹
        file_name = datetime.datetime.now().strftime('%Y-%m-%d %H-%M-%S') + '_screen.avi'
        # 文件路径
        self.screen_file_path = os.path.join(self.save_dir, file_name)

    # # 删除历史数据
    # def remove_path_file(self):
    #     file.remove_screen_files(self.save_dir, self.save_day)

if __name__=="__main__":
    screen_video=ScreenVideoControl(r'C:\Users\Onexia\Desktop\video_scree')
    screen_video.run()

parse.py
配置文件处理组件

import os
import configparser
class ReadConf(object):

    # 程序化入口类
    def __init__(self, file_name='system.inf', path='./', encode='utf-8'):
        self.conf = configparser.ConfigParser()
        self.file_path = os.path.join(path, file_name)
        a=self.conf.read(self.file_path, encoding=encode)


    def get_value(self, section,key,):
        # 获取配置文件的信息
        return self.conf.get(section, key)

    def get_conf(self):
        return self.conf

    def write_or_update_value(self, section, key, value):
        self.conf.set(section, key, value)
        with open(self.file_path, 'w',encoding='utf-8') as fw:  # 循环写入
            self.conf.write(fw)

system.inf配置文件

[conf]
fps = True
flag = False


运行结果

经验分享-如何用python 和cv2 实现电脑录屏功能-好用!!_第1张图片

打开保存视频文件夹,会发现有你录下来的视频
经验分享-如何用python 和cv2 实现电脑录屏功能-好用!!_第2张图片

flag是录频·结束与否的标志,可用于监控其他组件的运行过程,比如键盘焦点或者其他线程运行,当其他程序开始时把flag设置为False,结束时把flag设置为True。

fps帧率FPS 是图像领域中的定义,是指画面每秒传输帧数,通俗来讲就是指动画或视频的画面数。
不同的电脑处理速度不同,有人的视频可能比实际的偏快或者偏慢,这是由于帧率的不同,不同电脑要找到合适的帧率才最接近真实的速度。这个需要自己调节。
下次我会讲怎么找到合适的帧率。see you!!

你可能感兴趣的:(技术,python,python,爬虫,经验分享)