领先的免费Web技术教程,涵盖HTML到ASP.NET

网站首页 > 知识剖析 正文

python写一个动态录屏程序

nixiaole 2025-01-02 18:13:46 知识剖析 29 ℃
前面一片文章介绍了一个用Python写的静态录屏工具,
但是并不支持动态录屏。它捕获的是静态屏幕截图,并将连续的截图保存为视频文件。在实际应用中,由于pyautogui库捕获图像的速度可能较慢,因此无法实现真正的动态录屏效果。如果你需要实现真正的动态录屏,可以考虑使用更专业的库,例如pyav、imageio-ffmpeg等,它们能够更好地处理视频流并生成高质量的动态录屏视频。同时,注意动态录屏功能可能会消耗较多的系统资源,对电脑性能和运行效率都有一定要求。
废话不多说直接上代码

import cv2
import pyautogui

def record_screen(output_file, fps=30):
    # 获取屏幕宽度和高度
    screen_width, screen_height = pyautogui.size()
    
    # 创建视频编码器
    fourcc = cv2.VideoWriter_fourcc(*'mp4v')
    out = cv2.VideoWriter(output_file, fourcc, fps, (screen_width, screen_height))
    
    # 设置屏幕录制区域
    screen_area = (0, 0, screen_width, screen_height)
    
    while True:
        # 捕获屏幕图像
        img = pyautogui.screenshot(region=screen_area)
        
        # 转换图像颜色空间
        frame = cv2.cvtColor(np.array(img), cv2.COLOR_RGB2BGR)
        
        # 将图像写入视频文件
        out.write(frame)
        
        # 按下q键停止录屏
        if cv2.waitKey(1) == ord('q'):
            break
    
    # 释放资源
    out.release()
    cv2.destroyAllWindows()
    print(f'录制已保存为{output_file}')

def main():
    output_file = 'screencast.mp4'
    fps = 30
    
    print('按下q键停止录屏')
    record_screen(output_file, fps)

if __name__ == '__main__':
    main()


这段代码中,使用pyautogui库的screenshot()方法来捕获屏幕图像,并使用opencv-python库的VideoWriter类创建视频编码器。然后,我们定义了屏幕录制区域,这决定了录制的屏幕区域。在循环中,我们根据指定的区域捕获屏幕图像,并将图像写入视频文件。按下"q"键时,程序停止录屏并将录制的视频保存为screencast.mp4文件。

请注意,动态录屏可能会对计算机性能产生较大的影响,尤其是在较大的屏幕分辨率和高帧率的情况下。确保您的计算机具备足够的处理能力来支持动态录屏操作。


最近发表
标签列表