如何在 OBS Studio 直播中干净地显示键盘和手柄输入

当我录制第一个讲解代码编辑器快捷键的屏幕录制时,我一直在想:观众根本不知道我实际按了什么。我要么得像 Ctrl+Shift+P 这样大声说出每个组合,要么在后期编辑时手动绘制提示叠加层。这很不理想,尤其是当视频长达半小时时。
游戏玩家和速通玩家面临这个问题更加频繁。没有视觉叠加层的情况下,展示手柄按键时机或射击游戏中的连跳机制几乎是不可能的。
通常这些任务通过变通方法解决:在单独的窗口中启动第三方工具,然后使用窗口捕获配合色键通过 OBS 捕获它。这会消耗额外的 CPU 资源,而且看起来很乱。开发者 univrsal 的 input-overlay 插件用不同的方式解决了这个问题。它作为原生来源直接集成到 OBS Studio 中。
这个插件能做什么
该项目使用 C++ 编写,运行在 Windows 和 Linux 的 64 位版本上。它的任务很简单:以最低延迟实时拦截设备输入并将其绘制到场景上。
支持的设备包括:
- 标准键盘(支持任何布局和修饰键)
- 鼠标(追踪按钮、滚轮和光标移动)
- 手柄和控制器(Xbox、PlayStation、通用 DirectInput/XInput)
该插件使用自定义纹理和精灵图,而不是简单的文本日志。你拿一张手柄或键盘的图片,将其切割成不同状态(按钮松开/按钮按下),然后将图形绑定到系统事件。
内部结构:架构和依赖
项目代码库包含几个有趣的解决方案。为了避免为每种设备类型重复造轮子,作者打包了成熟的底层库。
对于全局键盘和鼠标拦截,它使用 libuiohook。这个库在操作系统系统钩子级别工作,这使得即使 OBS 窗口本身在后台或游戏以全屏模式运行时也能监听输入。
手柄由 SDL2 处理。这保证了与不同代控制器的出色兼容性,无需处理原始设备描述符。
mongoose 的集成值得特别关注——一个轻量级嵌入式 Web 服务器。为什么按键捕获插件需要这个?如果你用两台电脑进行直播(一台用于游戏,另一台作为直播编码器),你可以将输入事件通过本地网络从游戏电脑直接发送到流媒体机器上的 OBS 实例。这是一个非常巧妙的功能,消除了线缆的混乱。
如何构建自己的叠加层
插件配置由两个文件组成:PNG 图形纹理和 JSON 布局文件。
之前该项目使用 .ini 格式,但最终转向了 JSON。所以你不必在记事本中计算按钮的像素坐标,作者发布了一个名为 Config Creation Tool (CCT) 的可视化 Web 编辑器。
你在浏览器中上传精灵图,在按钮上放置边界框,将它们链接到按键代码,然后导出完成的配置:
之后,你只需在 OBS Studio 中添加一个新的"Input Overlay"源,指向 JSON 和 PNG,小部件就可以使用了。插件通过 OBS 的图形管道渲染纹理,因此渲染开销几乎为零。
这对开发者有什么用处
它看起来可能只是一个严格的直播工具。但对于技术内容,它同样有用:
- 录制教育屏幕教程。 在 Vim、Emacs、Blender 或 VS Code 中演示快捷键可以帮助观众实时复制操作,而不会因停顿而分心。
- 测试手柄和输入延迟。 如果你在开发独立游戏或模拟器,叠加层可以让你在视觉上交叉检查控制器按键与屏幕上角色反应。
- 演示和团队演示。 在复杂的 UI 场景或终端工具演示过程中,观众可以立即看到修饰键和功能键。
细节和限制
仓库中的文档很简洁,所以初学者需要花半小时理解精灵图结构。从头开始创建精美的皮肤需要基本的图形编辑器技能。
还要注意隐私。由于钩子全局拦截输入,在直播或视频录制期间,如果你开始输入密码或私人数据,叠加层会忠实地显示任何按键。对于这些情况,最好提前在 OBS 中设置热键来隐藏源。
该插件也专注于 Windows 和 Linux x64——macOS 构建未获得官方支持。
值得一试吗
如果你需要一种干净、高性能的方式在 OBS 中显示设备输入,而无需浏览器变通方案和帧率下降,input-overlay 是最可靠的选择之一。
该项目自 2017 年以来一直活跃,获得了超过 4,000 颗星,并专注于解决一个特定任务而不使代码库臃肿。预构建的二进制文件可在 GitHub 的 Releases 选项卡中找到,手柄和键盘的现成预设可以在 OBS Project 论坛上找到。
相关项目