---
title: "绿幕双语字幕接入 OBS 的完整做法"
description: "用窗口捕获加色键滤镜把双语字幕叠进 OBS 画面，讲清楚绿色取值、缩放、DPI 与刷新率这几个实际会踩的坑。"
canonical: https://obstrans.net/zh/blog/bilingual-subtitles-obs-chroma-key
language: zh
topic: obs-tech
published: 2026-07-18
updated: 2026-08-05
keywords: 绿幕字幕, 色键, OBS 窗口捕获, 双语字幕, Chroma Key
---

# 绿幕双语字幕接入 OBS 的完整做法

> OBS 没有原生实时字幕，通行做法是让翻译工具输出一个纯绿背景的字幕窗口，OBS 窗口捕获后用色键抠掉绿色。难点不在原理，在于绿色取值、DPI 缩放和捕获方式这三个细节。

OBS 没有内置的实时字幕能力。跨境直播里通行的做法，是把字幕当成一个「视频源」处理：翻译工具画一个纯绿底的字幕窗口，OBS 抓这个窗口，再用色键把绿色抠成透明。

这个方案的可贵之处在于**解耦**——任何能画字的程序都能当字幕源，OBS 不需要知道字幕是怎么来的。代价是要处理窗口捕获这一层的一堆细节。

## 背景色：#00B140 和 #00FF00 的说法要分开看

**#00B140 确实是影视行业的绿幕标准色**，但它标的是布料和油漆的颜色——为的是在打光和镜头拍摄之后仍然均匀。字幕窗口是软件直接画出来的，没有布料褶皱、没有打光不均、也没有传感器噪声，那套理由在这里并不成立。

真正会咬人的是另一件事：**OBS 预设的 Key Color Type「Green」在代码里就是 `0x00FF00`**（见 [chroma-key-filter.c](https://github.com/obsproject/obs-studio/blob/master/plugins/obs-filters/chroma-key-filter.c) 里的 `key_type` 分支）。也就是说，如果你把字幕窗口的背景设成 #00B140，却在 OBS 里选了预设的 Green，OBS 抠的是另一个颜色。表现是要把 Similarity 拉得很高才能勉强抠干净，然后文字边缘开始发毛——很多人会以为是「绿色选得不好」，其实是两端根本没对上。

所以这一节的结论只有两条，其余都是细节：

1. **两端必须是同一个颜色。** 用 Custom 填十六进制值，或者用取色器直接吸窗口背景；
2. **背景色要和文字颜色在色相上尽可能远。** 白字黑边配绿底是安全组合；如果字幕里有绿色元素，就换品红或蓝色做底。

至于取 `#00FF00` 还是 `#00B140`：对软件渲染的窗口，两个都能干净抠掉，前者的好处仅仅是和 OBS 预设对得上。

## 窗口捕获方式只有两种（加一个自动）

Windows 上 OBS 的 Window Capture 源里，Capture Method 下拉框只有三项，[官方界面文案](https://github.com/obsproject/obs-studio/blob/master/plugins/win-capture/data/locale/en-US.ini)里写得很清楚：

- **Automatic**：让 OBS 自己挑；
- **BitBlt (Windows 7 and up)**：老方法，开销低，但抓不到 GPU 加速渲染的内容，遇到 Electron、Chrome 这类应用经常抓到全黑；
- **Windows 10 (1903 and up)**：这一项就是 Windows Graphics Capture，兼容性最好，能抓硬件加速渲染的窗口。

网上常见「Windows Graphics Capture 是第三种方式」的说法，是把同一项的技术名和界面名当成了两个东西。

**关于那圈黄色边框。** 用 Windows 10 (1903 and up) 抓窗口时，被抓的窗口周围会出现一圈黄色高亮。这是 Windows 自己画的采集提示，[OBS 官方文档](https://obsproject.com/kb/laptop-troubleshooting)说明它来自微软的采集 API、出于安全目的存在。两个要点：**它只画在你本机屏幕上，不会进入录制和推流**；以及在系统提供了关闭接口的版本上（目前是 Windows 11），OBS 会自动请求关掉它，用户侧不需要做任何事（见 [OBS 的 WinRT 采集实现](https://github.com/obsproject/obs-studio/blob/master/libobs-winrt/winrt-capture.cpp)里的 `IsBorderRequired`）。看到黄框不必排查，它不影响观众。

如果字幕窗口抓出来是黑的，第一件事就是切换捕获方式，而不是怀疑字幕程序有问题。

## DPI 缩放是隐形杀手

这是最容易浪费半小时的坑：Windows 的显示缩放（125%、150%）会让窗口捕获拿到的实际像素尺寸和你在屏幕上看到的不一致。表现是字幕在 OBS 里模糊、或者只捕获到窗口的左上角一部分。

最稳的解决办法是把字幕窗口所在显示器的缩放设为 100%，让窗口的逻辑尺寸和像素尺寸一致。Windows 的兼容性设置里还有「替代高 DPI 缩放行为」可以试，但它的效果取决于具体程序怎么声明 DPI 感知，不是每次都管用，别把它当成第一选择。

另一个常被忽略的做法：**让字幕窗口按你在 OBS 里最终要显示的像素尺寸去渲染**，而不是渲染完再让 OBS 缩放。文字经过一次缩放就会变糊，这一步省下来的清晰度，比事后调任何滤镜都有效。

## 字幕的可读性比技术实现更重要

技术跑通之后，真正影响效果的是排版决策：

- **两行封顶。** 双语字幕天然是两倍长度，超过两行观众根本读不完就换了。
- **原文在上、译文在下**，且译文字号可以略大。海外观众看的是译文，原文只是佐证。
- **留驻时间不能只按字数算。** 一句很短但信息密度高的话（比如价格、尺码）需要多留一会儿。
- **放在安全区内。** 各平台的直播间界面会在底部盖一层评论和按钮，字幕压在下面会被遮住。各平台盖住多少没有公开规格，也会随版本变，唯一可靠的办法是自己开一场，用手机以观众身份进直播间截图，把遮挡区域量出来再定位置。定完用 Transform → Edit Transform 把数值记下来。

## 延迟的错觉

一个常见的误判：观众反馈「字幕比声音慢」。这时先别急着调翻译工具。

字幕和音频在 OBS 里走的是两条完全独立的路。OBS 的 Sync Offset 在 Advanced Audio Properties 里，是逐个**音频源**的设置；视频源（包括字幕这个窗口捕获）没有对应的东西。所以两个方向要分开处理：

- 如果字幕**早于**语音，往前对齐的手段在视频侧：OBS 的滤镜列表里有一个 Render Delay，官方的说明就是「延迟源的渲染，用于处理音画同步」（见 [OBS 滤镜指南](https://obsproject.com/kb/filters-guide)）。给字幕源加上它，按毫秒往后推。
- 如果字幕**晚于**语音，Render Delay 帮不上忙——它只能往后推，不能往前拉。这时要查的是字幕程序自己的出字速度。**注意 Window Capture 源没有帧率设置**，画面刷新率由 Settings → Video 里的 FPS 决定，去源属性里找「捕获帧率」是找不到的。

调之前先录一段本地文件逐帧看，靠肉眼在直播中判断谁快谁慢很不可靠。

## Steps

1. **打开翻译工具的绿幕字幕窗口** — 在翻译工具里开启独立的字幕窗口，背景设为一个纯色，字体白色加黑描边，保证在任何画面上都可读。记下这个背景色的十六进制值，下一步要用它。
2. **在 OBS 添加窗口捕获** — 添加 Window Capture 源，选中字幕窗口。Capture Method 只有 Automatic、BitBlt (Windows 7 and up)、Windows 10 (1903 and up) 三项，优先选最后一项，抓不到时再退回 BitBlt。勾上 Client Area 可以只抓窗口内容、去掉标题栏。
3. **添加色键滤镜** — 右键该源加滤镜。字幕窗口是软件画出来的纯色底，OBS 官方把 Color Key 归为「用于图形与窗口」的滤镜，Chroma Key 才是给绿幕和实拍画面用的，两个都可以试，先试 Color Key。Key Color Type 选 Custom 并填入上一步记下的颜色，不要直接用预设的 Green。
4. **微调溢出与边缘** — 先只调 Similarity，从默认值小幅上调到背景色完全消失。文字边缘仍然带底色时，调高 Key Color Spill Reduction（这个值越高、去除越激进）。如果文字本身开始被吃掉，说明 Similarity 调过头，回退几格。
5. **锁定尺寸与位置** — 把字幕源调整到画面下方安全区内，然后在 OBS 里对该源右键选「变换 → 编辑变换」记下数值，防止误拖动。

