• 感谢楼主分享,小改了一下,但是感觉录屏的时长像是设置帧数 * 时长,类似于慢放,FPS 需要设置吗?

    import os, time
    from datetime import datetime
    from PIL import ImageGrab, ImageDraw
    import numpy as numpy
    import cv2
    import pygetwindow
    import pyautogui
    
    FPS = 5
    MAX_FILES_COUNT = 10
    PER_FILE_SECONDS = 5
    VIDEO_FILE_PATH = r'D:\循环录屏'
    
    def record_mouse(img, mouse_x, mouse_y):
        """
        在图片上绘制鼠标位置
        :param img: 需要绘制的图片
        :param mouse_x: 鼠标在图片上的相对x坐标
        :param mouse_y: 鼠标在图片上的相对y坐标
        :return:
        """
        # 1.首先获取图片大小
        w, h = img.size
        # 2.加载图像
        draw = ImageDraw.Draw(img)
        # 判断鼠标位置,如果当时鼠标坐标在图片范围之内,则绘制鼠标
        if 0 < mouse_x < w and 0 < mouse_y < h:
            # 绘制一个圆点,以红色填充
            draw.ellipse((mouse_x-2, mouse_y-2, mouse_x+2, mouse_y+2), fill=250)
        # 返回添加了鼠标的截图图像
        return img
    
    def get_region_by_title(window_title):
        """
        window_title:特定窗口名称
        能找到窗口返回窗口对应区域边界坐标
        找不到窗口返回整个桌面边界坐标
        """
        if window_title:
            # 1.首先根据窗口名称获取到对应的窗口
            window_titles =  pygetwindow.getWindowsWithTitle(window_title)
            if window_titles:
                window = pygetwindow.getWindowsWithTitle(window_title)[0]
                # 2.激活并将对应的窗口显示到最顶层
                window.restore()
                window.activate()
                # left, top, width, height = window.left, window.top, window.width, window.height # 窗口区域坐标
                return window.left, window.top, window.width, window.height
    
        # left, top, width, height = 1,1,*pyautogui.size() #桌面区域坐标
        return 1,1,*pyautogui.size()
    
    
    def recode(window_title = ''):
        """
        录制指定窗口的视频
        :param window_title: 窗口名称
        :return: 
        """
        left, top, width, height = get_region_by_title('')
        # 3.根据当前时间生成录像文件的名字
        file_name = datetime.now().strftime('%Y-%m-%d %H-%M-%S')
        print(datetime.now().strftime('%Y-%m-%d %H-%M-%S'))
    
        # 5.设置VideoWriter_fourcc录制类型
        fourcc = cv2.VideoWriter_fourcc(*'XVID')
        # 6.设置文件名,大小,帧率等, VIDEO_FILE_PATH是我设置的一个全局参数,是录像的保存目录,如VIDEO_FILE_PATH = 'E:\\record_files'
        #   FPS我也参数化了,FPS=15,这个帧率可能会影响录像的播放速度,可以根据自己的情况自行调整
        video = cv2.VideoWriter(f'{VIDEO_FILE_PATH}\\{file_name}.avi', fourcc, FPS, (width, height))
        # 7.记录开始录制视频的时间
        start_time = time.time()
        # 8.当录制时间不足1分钟时,循环写入到录像文件中
        while time.time() - start_time < PER_FILE_SECONDS:
            # 这里我每次写入都重新获取了窗口的顶点位置和大小,这样的用处是在你拖动对应的窗口后,录像的区域会跟随你的拖动重新选定,不会傻傻的还在录原来的位置
            left, top, width, height = get_region_by_title(window_title)
            # # 根据窗口区域截取对应的图像
            # capture_image = ImageGrab.grab((left, top, left + width, top + height))
    
            # 获取鼠标坐标,利用到了pyautogui库
            mouse_x, mouse_y = pyautogui.position()
            # 将截图的图像传入record_mouse方法,获得绘制了鼠标位置之后的截图
            capture_image = record_mouse(ImageGrab.grab((left, top, left+width, top+height)), mouse_x - left, mouse_y-top)
    
            # 生成图像帧
            frame = cv2.cvtColor(numpy.array(capture_image), cv2.COLOR_RGB2BGR)
            # 将图像帧写入到文件中
            video.write(frame)
        video.release()
    
    
    
    def del_files():
        """
        判断文件数量是否超过设定值,如果超过,则删除一定数量的文件
        :return:
        """
        # 根据目录获取文件列表
        files = os.listdir(VIDEO_FILE_PATH)
        # 判断文件数量,如果超过了设定的最大值MAX_FILES_COUNT(自行定义),则删除最前面的几个文件
        if len(files) > MAX_FILES_COUNT:
            for i in files[:len(files)-MAX_FILES_COUNT]:
                os.remove(f'{VIDEO_FILE_PATH}\\{i}')
    
    
    def main():
        while True:
            del_files()
            recode('锚点降临')
    
    main()   
    
  • 需要翻墙?

  • 我也想知道瓶颈是多少

  • 如果被裁之后直接送外卖,是不是算无缝衔接😂

  • 2023 年 3 月(几点感受) at 2023年04月03日

    钱少是多少呢?

  • 测试小白求助 at 2023年02月18日

    等价类、边界值、正交

  • 看来我拖了薪资的后腿。。。。

  • 提示
    AI 机器人开小差了,阁下可以点击刷新,或者微信搜索「Kotaro 的创意」反馈以及获得更佳体验

  • 是他把人裁了还是跑路了

  • 微信这么坑

  • 小白刚学测试 at 2022年11月17日

    为什么不做安保,少走 3 年弯路😅

  • 第 2 个问题不应该是必测的边界值吗?

  • 项目天天上线,等出个大问题就知道疼了

  • 果然高阶

  • playwright 入门简介 at 2022年10月13日

    有时间试下

  • 1、电脑建热点手机连电脑 wifi,在电脑抓包
    2、换其他手机试有没有问题
    3、转给开发看