You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何突破Python中mss屏幕捕获的60fps帧率限制?

突破mss屏幕捕获60fps限制的解决方案

核心思路

你的问题根源在于mss默认使用的GDI后端依赖BitBlt等API,这些API会强制同步到显示器的刷新周期(60Hz),导致帧率被锁。要突破限制,核心是绕过GDI的垂直同步机制,改用更高效的捕获方式。

可行方案

1. 切换到mss的DXGI后端(推荐)

mss支持DXGI(DirectX Graphics Infrastructure)捕获后端,它直接从GPU显存读取帧数据,完全绕过GDI的同步逻辑,不受显示器刷新率限制,轻松突破60fps。

启用方式非常简单,只需在创建mss实例时指定backend='dxgi':

import mss

# 使用DXGI后端初始化屏幕捕获
with mss.mss(backend='dxgi') as sct:
    # 捕获主显示器(根据需要调整monitor索引)
    monitor = sct.monitors[1]
    while True:
        # 高速捕获帧
        frame = sct.grab(monitor)
        # 此处添加帧处理逻辑

这个方案无需修改源码,兼容性好(支持Win10及以上系统),大部分场景下能直接达到数百fps的捕获速率。

2. 修改mss的GDI后端实现(进阶)

如果因特殊原因必须使用GDI后端,可以修改mss的Windows GDI源码,替换导致同步的API:

  • 将CreateCompatibleBitmap替换为CreateDIBSection:兼容位图会依赖显示器设备上下文,强制同步;而DIBSection是内存中的位图,不与显示器刷新绑定。
  • 调整GetDIBits的调用方式:直接从DIBSection读取像素数据,避免不必要的等待。

修改后重新编译mss即可,但这种方式需要对Windows GDI API有一定了解,且维护成本较高。

3. 禁用全局垂直同步

在显卡驱动设置中关闭全局垂直同步(V-Sync),部分场景下可以解除GDI API的同步限制。但此方法会影响全局显示效果,仅作为备选方案。

补充说明

你看到的其他用户能达到600fps,基本都是使用了DXGI或类似的GPU级捕获方式,完全避开了GDI的同步机制。所以优先尝试DXGI后端是最高效的解决路径。

内容的提问来源于stack exchange,提问作者BappoHotel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 21:25:30