☰
自动HSV抠像 vs PR手工遮罩:dsh-pet 双路线透明处理策略与选择依据
2026/10/14 15:27:25 网站建设 项目流程
  • AI 插件
  • dsh-plugin
  • 交互助手
  • 桌面应用

【免费下载链接】dsh-pet

DSH 桌面宠物:一行命令装好即用的透明动画小桌宠,支持多开、大小位置随心配置;还内置 DIY 素材链,能用 AI 视频自造专属宠物

项目地址:https://gitcode.com/gh_mirrors/ds/dsh-pet
点击查看免费下载

dsh-pet 是一款一行命令装好即用的透明动画桌面宠物,它的 DIY 素材链提供了两条「绿幕视频 → 透明动画」的处理路线:自动 HSV 抠像(chroma_step02.py)与PR 手工遮罩(pr_import_step02.py)。本文带你彻底搞懂这两条透明处理路线各自怎么工作、优劣在哪,以及遇到残边、误抠时该如何选择。

先认识成品:透明处理支撑了什么

dsh-pet 的透明动画最终会在浏览器 overlay 或桌面透明置顶小窗中播放——宠物直接「站」在你的桌面上,没有边框、没有底色:

这套「无底色」体验的前提,就是素材链第 2 步(step02)产出的带 alpha 通道的透明 webm。而把绿幕视频变成透明视频,正是 dsh-pet 素材链中最具技术含量的一环——项目为此设计了双路线,按需二选一,且两条路线产出同一级step02/,后续步骤完全一致。

素材链全景:两条路线的交汇点

dsh-pet 把「AI 视频 → 桌面宠物」拆成了可复现的管线(见 README.md 的「从零生成你自己的宠物」章节):

video/*.mp4(绿幕源视频) → step01 水印填充(watermark_step01.py) → step02 绿幕抠像 ★ 双路线分岔处 ├─ 路线 A:chroma_step02.py 自动 HSV 抠像 └─ 路线 B:pr_import_step02.py PR 手工遮罩转码 → step03 归一化(normalize_step03.py,2160×1215 统一站立居中) → step04 转码 640×360 播放变体(encode_thumbs.py) → dsh-pet/assets/webm/(插件实际播放的素材)

源视频来自 AI 视频生成工具,按 prompts/桌面宠物 10 秒动作提示词.md 的配方产出:16:9、纯绿幕(#00FF00)、人物头顶/脚底位置固定。step01 先用 scripts/watermark_step01.py 配合 video/watermark_mask_v5.mkv 遮罩把片尾水印用邻近像素填掉(核心取色逻辑在 scripts/fill_nn.py),为抠像铺路。

真正需要「二选一」的只有 step02。

路线 A:自动 HSV 抠像,一键出透明

scripts/chroma_step02.py 是默认路线:对step01/里的每个 mp4 自动完成绿幕去除,4 进程并行、支持断点续跑(已完成的文件自动 SKIP),全程无需人工介入。

为什么是 HSV,而不是传统 chromakey?

这是路线 A 最值得玩味的设计。脚本注释直接点破了原因(chroma_step02.py#L22-L29):

传统 chromakey(YUV 色度距离)和 RGB 色差阈值都是「以绿幕为中心画圈」——蓝色、白色等彩色可能落入圈内被误抠;而HSV 色相判定只认绿色方向,蓝/白/红永不误抠。

对桌面宠物来说这一点至关重要:宠物身上常有大面积蓝色头发、白色裙摆,「画圈式」抠像极易把这些像素误判为背景,抠出破洞。HSV 方案则只把「色相落在绿色区间 + 饱和度/明度达标」的像素判为背景,判定逻辑天然对主体安全。

核心参数一览:

参数值作用
GREEN_HUE_MIN/GREEN_HUE_MAX70° / 170°绿色色相判定区间
SAT_MIN/VAL_MIN0.15 / 0.15饱和度/明度下界,白底浅色不算背景
HUE_FEATHER6°色相边界线性渐变,消除硬边

抠像主流程(chroma_step02.py#L146-L183)分三步:

  1. 采样背景色:sample_background_color对帧的边缘区域(四周 1/10 留白内)抽样,按 8 级量化投票出最可能的绿幕色作为参考;
  2. 逐帧判背景:RGB → HSV 向量化转换,落在绿色色相区间且饱和度、明度达标的像素置 alpha=0(透明),色相边界做 6° 线性渐变,让边缘柔和过渡;
  3. 透明编码:原始像素流经 ffmpeg 编码为yuva420p的 VP9 透明 webm(CRF 30),alpha 通道真实写入文件。

路线 A 的边界在哪

自动抠像的前提是「背景确实是干净的绿幕」。当动作里出现与绿幕相近色的第三方物品(比如绿色零食、植物道具),或透明边缘复杂(半透明气泡、飘动的轻薄裙摆)时,色相区间判定会出现残边(绿边残留)或误抠(主体被穿透),此时就需要路线 B 出手。

路线 B:PR 手工遮罩,逐帧精修

scripts/pr_import_step02.py 的定位是「人工精修覆盖」——把 PR(Premiere Pro)里手工抠好的透明视频直接转码进 step02,覆盖该动作此前的自动抠像结果,其余动作仍走自动路线。

什么动作该选手工遮罩

脚本 docstring 给出了明确判据(pr_import_step02.py#L3-L17):

  • 动作包含第三方物品(道具颜色接近绿幕、或物品本身半透明);
  • 透明边缘复杂,HSV 区间判定无法干净分离主体与背景;
  • 自动抠像产物出现残边或误抠,且调参救不回来。

这类动作在 dsh-pet 的动画库中占比不小:吃青团、吃粽子、堆雪人、放孔明灯……道具一多,「纯绿幕背景」的假设就守不住了。

手工遮罩的三步走

cd scripts # 1. 在 PR 中对该动作手工抠像(蒙版/跟踪),导出带 alpha 的透明 .mov # (推荐 ProRes 4444 with Alpha),文件名与动作名一致,如 吃汤圆.mov,放入 pr/ # 2. 转码覆盖:pr/*.mov → step02/*.webm(VP9 + yuva420p,CRF 32) python pr_import_step02.py # 3. 后续与路线 A 完全相同: python normalize_step03.py # 归一化 2160×1215 统一站立居中 python encode_thumbs.py # 转码 640×360 播放变体

几个关键细节:

  • mov 必须携带 alpha 通道(ProRes 4444 with Alpha 或 PNG 序列封装),ffmpeg 解码端才能读回透明,否则输出为不透明黑块;
  • 转码命令(pr_import_step02.py#L51-L71)与路线 A 同源:libvpx-vp9+yuva420p,保证两条路线产物在编码层面完全一致;
  • 转码后同样支持断点续跑校验(存在、够大、能被 ffprobe 读到视频流才算完成)。

双路线对比与选择依据

维度路线 A:HSV 自动抠像路线 B:PR 手工遮罩
入口脚本chroma_step02.pypr_import_step02.py
人工成本零,一键全自动需 PR 手工遮罩 + 导出 mov
判定依据色相 70°–170° + 饱和度/明度阈值人工蒙版逐帧精修
适合场景背景为干净绿幕的常规动作含第三方物品 / 透明边缘复杂的动作
典型失败模式残边、误抠(同色道具)耗时(人工逐帧)
产物step02/*.webm(VP9 alpha)step02/*.webm(VP9 alpha,覆盖同名)

选择依据可以浓缩成一句话:默认全走路线 A;哪一段动作残边误抠救不回来,就只把那一段换成路线 B 覆盖——因为两条路线产出同一级step02/,单动作替换后normalize_step03.py与encode_thumbs.py原样照跑,整条素材链其余环节零改动。

共享后半程:归一化与转码

无论哪条路线,step02 之后都汇入同一条轨道,这也是「双路线可混用」的结构保证:

  • step03 归一化:scripts/normalize_step03.py 读取各动画首尾站立帧,把人物统一缩放到站立高度 900px,在 2160×1215(16:9)透明画布上水平居中、脚底对齐——这一步正是双路线产物「同一宠物不同动作站在一起也不穿帮」的关键(normalize_step03.py#L85-L129);
  • step04 转码:scripts/encode_thumbs.py 把母版压到 640×360(CRF 40),宠物实际播放只显示约 260px,体积从百 MB 级降到 ~10MB,才能进 npm 包发布。

桌面模式下,这些透明 webm 会在 Electron 透明置顶小窗中逐帧播放,配合余额动画、气泡与系统通知:

项目实战:为什么最终「全部手工」

了解机制后,一个有趣的事实:dsh-pet 官方素材实际上全部采用了路线 B——所有动作均在 PR 中手工抠像(见 README.md 中「本项目全部采用路线 B」的说明)。原因是主力角色动作密集、道具繁多,HSV 自动抠像在批量动作上的残边率难以接受,人工遮罩的精细度对最终观感是决定性的。

而 chroma_step02.py 被完整保留为自动化兜底:任何人 clone 仓库、拿到任意绿幕视频,都可以一键全自动复现透明动画——这正是一个可开源复现素材链应有的样子:精修走人工,量产走自动。

多开同屏时,不同「种类」的宠物(pet pack)共享这套素材链,各自动作独立成池:

小结:一张图记住选择逻辑

  1. 先跑自动:watermark_step01.py→chroma_step02.py,干净绿幕的动作到此为止;
  2. 看效果:播放 step02 产物,检查残边/误抠(alpha 校验思路可参考 scripts/check_alpha.py);
  3. 局部救场:救不回来的动作丢进 PR 手工遮罩,pr_import_step02.py只覆盖那一个文件;
  4. 统一收尾:normalize_step03.py→encode_thumbs.py,双路线产物在此合流,无感切换。

自动 HSV 抠像负责「人人可复现」,PR 手工遮罩负责「观感上限」——两条路线各守其位,才撑起了 dsh-pet 上百个动画丝滑无缝的透明体验。

  • AI 插件
  • dsh-plugin
  • 交互助手
  • 桌面应用

【免费下载链接】dsh-pet

DSH 桌面宠物:一行命令装好即用的透明动画小桌宠,支持多开、大小位置随心配置;还内置 DIY 素材链,能用 AI 视频自造专属宠物

项目地址:https://gitcode.com/gh_mirrors/ds/dsh-pet
点击查看免费下载

相关推荐

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询