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

如何用Python获取第三方应用的原生FPS(帧率)?

获取第三方应用自身FPS的Python方案

方法1:Windows性能计数器(Performance Counters)

很多游戏和图形应用会向Windows性能计数器注册帧率相关指标,无需侵入应用或捕获屏幕,就能通过Python调用Windows的Performance Data Helper(PDH)接口读取数据。

实现步骤:

  1. 安装依赖:pip install pywin32
  2. 找到目标应用的计数器路径:
    • 打开Windows「性能监视器」(perfmon.msc),新建数据收集器集,找到目标进程对应的帧率计数器(比如Unity游戏对应Unity Engine\FPS,Unreal引擎游戏对应Unreal Engine\Frame Rate)
  3. 代码实现:
import win32pdh
import time

def get_fps(counter_path):
    query = win32pdh.OpenQuery()
    counter_handle = win32pdh.AddCounter(query, counter_path)
    win32pdh.CollectQueryData(query)
    time.sleep(1)
    
    try:
        while True:
            win32pdh.CollectQueryData(query)
            _, value = win32pdh.GetFormattedCounterValue(counter_handle, win32pdh.PDH_FMT_DOUBLE)
            print(f"当前FPS: {value:.1f}")
            time.sleep(1)
    except KeyboardInterrupt:
        win32pdh.RemoveCounter(counter_handle)
        win32pdh.CloseQuery(query)

# 替换为你找到的目标应用计数器路径
counter_path = r"\Process(Unity.exe)\Unity Engine\FPS"
get_fps(counter_path)

方法2:通过DXGI接口读取Swap Chain帧率

对于使用DirectX渲染的Windows游戏,可通过DXGI接口查询应用swap chain的帧统计数据,Python用ctypes调用Windows的DXGI库实现。

核心思路与简化示例:

通过枚举DXGI设备找到目标进程关联的设备,调用IDXGISwapChain::GetFrameStatistics获取帧率。完整实现需处理COM接口细节,以下是简化框架:

import ctypes
import time

dxgi = ctypes.WinDLL("dxgi.dll")

def get_dxgi_fps(process_name):
    # 此处需补充完整的DXGI设备枚举、进程关联、帧统计查询逻辑
    # 参考Windows SDK中DXGI官方示例,用ctypes封装对应接口
    while True:
        # 模拟获取帧率(实际需替换为真实DXGI调用)
        fps = 60.0
        print(f"当前FPS: {fps:.1f}")
        time.sleep(1)

get_dxgi_fps("Game.exe")

方法3:读取游戏控制台/日志输出

部分游戏支持开发者控制台,输入fps或showfps命令会持续输出帧率;若游戏将帧率写入日志文件,也可直接读取日志。

日志读取示例:

import time

def read_fps_from_log(log_path):
    with open(log_path, "r") as f:
        f.seek(0, 2)
        while True:
            line = f.readline()
            if line and "FPS:" in line:
                fps = float(line.split("FPS:")[1].strip())
                print(f"当前FPS: {fps:.1f}")
            time.sleep(0.5)

read_fps_from_log(r"C:\Games\MyGame\Logs\output.log")

关键注意事项

  • 性能计数器方法最易实现,但依赖应用是否注册对应计数器;
  • DXGI方法通用性更强,但需处理复杂的Windows COM接口,可能需要管理员权限;
  • 控制台/日志方法仅适用于支持该功能的应用;
  • 避免屏幕捕获/录屏方案,这类方法延迟高、误差大,与应用自身统计帧率差异明显。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 02:23:26