Python——40行代码实现屏幕录制功能

一、技术背景

import cv2          # 视频编码/写入/实时预览 ‌:ml-citation{ref="2,3" data="citationList"}
import numpy as np  # 图像数据格式转换 (PIL.Image 转 OpenCV 矩阵) ‌:ml-citation{ref="2,5" data="citationList"}
import pyautogui    # 屏幕截图捕获 (支持全屏/区域截取) ‌:ml-citation{ref="1,3" data="citationList"}
import time         # 控制录制帧率间隔 ‌:ml-citation{ref="2,7" data="citationList"}
from datetime import datetime  # 生成时间戳文件名 (避免重复覆盖) ‌:ml-citation{ref="7" data="citationList"}
import keyboard     # 监听键盘事件 (如按 Q 键终止录制) ‌:ml-citation{ref="7" data="citationList"}

二、基础功能逻辑

1. 分辨率获取‌
pyautogui.size() 动态适配当前屏幕尺寸 ‌23

‌2. 视频编码配置‌
使用 cv2.VideoWriter_fourcc(*"XVID") 定义 MPEG-4 编码格式,平衡文件大小与画质 ‌24

3‌. 循环捕获流程

while True:
    # 屏幕截图 -> 格式转换 -> 写入视频流 ‌:ml-citation{ref="4,5" data="citationList"}
    img = pyautogui.screenshot()
    frame = np.array(img)
    frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
    out.write(frame)
    
    # 检测终止按键 (如 Q)
    if keyboard.is_pressed('q'): break ‌:ml-citation{ref="7" data="citationList"}

4. 资源释放‌
录制结束后必须执行 out.release() 和 cv2.destroyAllWindows() 防止内存泄漏

三、完整代码

import cv2
import numpy as np
import pyautogui
import time
from datetime import datetime
import keyboard  # 新增输入检测库


def screen_record(output_file="output.avi", fps=15, resolution=None, codec='XVID'):
    """
    改进版屏幕录制函数(无界面模式)
    """
    if resolution is None:
        screen_size = pyautogui.size()
        resolution = (screen_size.width, screen_size.height)

    fourcc = cv2.VideoWriter_fourcc(*codec)
    out = cv2.VideoWriter(output_file, fourcc, fps, resolution)

    print("开始录制,按 'q' 停止...")
    start_time = time.time()

    try:
        while True:
            img = pyautogui.screenshot()
            frame = cv2.cvtColor(np.array(img), cv2.COLOR_RGB2BGR)
            out.write(frame)

            # 显示录制时间
            elapsed = time.time() - start_time
            print(f"\r正在录制:{elapsed:.1f} 秒", end="")

            if keyboard.is_pressed('q'):
                print("\n正在停止录制...")
                break
    finally:
        out.release()
        print(f"录制已保存至 {output_file}")


if __name__ == "__main__":
    timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
    filename = f"screen_record_{timestamp}.avi"

    screen_record(
        output_file=filename,
        fps=30,
        codec='MJPG'
    )

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

穿梭的编织者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值