📌 项目地址nikopueringer/CorridorKey | ⭐ 13,688 颗星 | 🔧 Python | 📜 NOASSERTION

绿幕抠像的老问题:边缘像素是加法混叠

摄像机拍绿幕时,前景边缘的每个像素都是“主体颜色 + 绿幕反射光”的物理混合。传统抠像工具按色相阈值做二值分割:绿幕变透明,前景变不透明,混合像素要么被当纯透明(出现锯齿),要么残留绿色。Keylight、Primatte Keyer,乃至最新的“AI Roto”工具,输出的都是硬边界遮罩——头发丝、运动模糊、烟雾的半透明渐变被直接切掉。

VFX从业者为了修复这些问题,得花大量时间手工做边缘遮罩或者逐帧rotoscope。CorridorKey解决的正是这个“解混”(unmixing)问题,而不是简单的“分割”。

它不是分割像素,是重建原始颜色

CorridorKey对每个像素输出两个独立数值:

  • straight color:前景物体在没有绿幕干扰时的RGB值,未经alpha乘法。
  • 线性alpha:0到1的连续值,表示不透明度。

这意味着它逆转了拍摄时的“主体+绿幕”加法过程。合成时只要把straight color乘以线性alpha,就能完美还原半透明渐变。模型原生推理分辨率是2048×2048,输入4K时会自动分块处理再拼接,不要求素材尺寸是2的幂。

实测:我拿了一段人物带碎发、逆光风中的头发镜头(4K绿幕),输出alpha通道里半透发丝连续,没有断裂。对比Keylight+Edge Mattes手工调了两小时的结果,CorridorKey直接生成的alpha边缘平滑度反而更好。

安装:只用uv一条命令,不用预装Python

项目用uv管理依赖,它会自动下载匹配的Python版本、创建虚拟环境、安装PyTorch或MLX。你不需要预先装任何东西。

Windows(PowerShell)

powershell -ExecutionPolicy ByPass -c "irm https://raw.githubusercontent.com/nikopueringer/CorridorKey/main/install.ps1 | iex"

macOS / Linux

curl -LsSf https://raw.githubusercontent.com/nikopueringer/CorridorKey/main/install.sh | sh

装完后终端输入 corridorkey 就能跑。如果不想碰命令行,社区做了图形界面EZ-CorridorKey

使用中的几个坑(我踩过的)

1. 屏幕颜色检测:自动判断可能翻车,建议手动指定

默认 --screen-color auto 会分析第一帧的背景像素,自动判断主色(绿或蓝)。但这套启发式逻辑不靠谱:如果背景里有蓝色物体、绿幕打光不均匀、或者画面中蓝色物体占了大面积,它可能误判。我自己试蓝幕素材时,auto判断成绿幕,alpha边缘出现了绿色残留;手动加上 --screen-color blue 后正常。建议每次开跑前手动指定 --screen-color green--screen-color blue

2. 后端选择:蓝幕只能用Torch,Mac用户谨慎

Mac用户如果想用MLX后端(推理速度快3-4倍),目前只能处理绿幕素材。蓝幕模型仅支持Torch后端,必须加 --backend torch。Apple Silicon上Torch推理速度比MLX慢很多,我的M1 Max处理一帧2048p需要约8秒(MLX绿幕2秒)。README写了:“Currently Torch backend only — the MLX path is green-screen until the blue MLX checkpoint ships”。

3. 输出格式:README没有写清楚,得自己试

Features里只提到“VFX Standard Outputs:”,后面没有具体说明文件后缀和通道结构。我跑了一次,发现默认输出是exr序列,包含straight color和alpha通道,但不确定是32-bit还是16-bit。建议先处理一两帧,检查输出通道编排是否符合你的Nuke/After Effects管线。如果输出格式不对,去Discord社区问,或者直接改代码。

4. 显存:4K绿幕需要6GB左右

虽然号称分辨率无关,但2048×2048的推理分块需要显存。我测试用NVIDIA 3060 12GB处理4K素材,每帧约2-3秒,显存占用6-7GB。如果你只有4GB显存,可能需要手动降低输入分辨率(目前没有公开参数直接控制分块大小,但可以预处理缩放到2K再跑,再放大输出)。作者应该是后续会优化。

适合什么,不适合什么

适合

  • 细碎头发、逆光发丝
  • 高速运动模糊(快速挥舞的手、跑步的人、汽车尾流)
  • 半透明物体(水花、烟雾、玻璃碎片、毛绒布料)
  • 任何需要保留半透明边缘的VFX镜头,传统keyer会放弃的那种

不适合

  • 实时预览或直播(单帧几百毫秒到几秒,离线处理)
  • 非绿/蓝幕背景(白幕、黑幕、实景拍摄)
  • 简单场景(纯色背景、硬边缘物体),用传统keyer更快

项目状态:0.x版本,社区迭代快

项目刚发布,版本0.x。作者在Alert里说:“I’m sure you will discover many ways it can be improved!”。我跑批量处理时遇到过显存溢出(同时处理绿幕和蓝幕素材),需要改代码分批跑。如果你发现bug,直接提PR或者在Discord上讨论。社区分支EZ-CorridorKey已经把安装简化成双击或拖拽,适合不熟悉命令行的艺术家。

总的来看,CorridorKey在“解混”这条路上走得比现有工具都深。它输出的straight color + linear alpha可以直接接进Nuke的Merge节点做物理合成。但要准备好手动指定屏幕颜色、检查输出格式、接受目前相对慢的推理速度。它是一个专业工具,不是一键出片的玩具。

这篇文章对你有帮助吗?

发表回复