Communitygithub.com

火焰表演视频转游戏精灵动画

将火焰表演者的视频素材转换为可用于游戏的精灵动画。适用于火舞、喷火、火棍、火剑等流动艺术表演(通常夜间拍摄)的片段,可去除背景并生成精灵表、动画片段或游戏资产。支持场景选择、裁切、背景移除(独立身体与火焰层)及打包输出,也可生成复古8-bit风格。

火焰表演视频转游戏精灵动画 是什么?

该技能能够将火焰表演者的原始视频素材处理为游戏引擎可直接使用的精灵动画序列,适合用于独立游戏开发、动作游戏角色资源制作或视觉特效资产库建设。它基于 Python 工具链,依赖 ffmpeg、PyTorch(支持 Apple MPS 或 CUDA GPU)和公开的姿势估计模型,能够自动识别并提取表演者的身体动作与火焰效果,将其分为两个独立图层输出,便于游戏中的渲染合成(例如身体+半透明火焰发光层)。用户只需提供原始视频文件(特别是未压缩的高帧率高动态范围素材),工具会自动完成场景筛选、关键帧裁剪、背景去除、动作裁切审核与打包生成 atlas 精灵表。技能还支持利用子代理并行审核多个动作批次,并内置步行/转身/旋转等基础动作类型识别,与同类工具相比其特色在于针对火焰表演场景优化了过曝区域处理和脚部锚点归一化,保证不同分辨率下动作对齐的准确性。支持 macOS(MPS)和 Linux/Windows(CUDA),并提供了完整的 HTML 预览界面和 JSON 格式的帧网格元数据。

兼容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Luan-vP/fire-sprite-kit/tree/HEAD/skills/fire-sprites

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

火焰表演视频转精灵动画

你将引导一位表演者从原始视频最终产出可在游戏中使用的精灵表。他们了解自己的表演;你负责运行工具。在需要他们视觉判断的两个关键节点(选择哪些动作、每个动作的起止位置)让他们介入,其余所有流程由你独立完成。

工具位于本工具包 tools/ 文件夹中(该文件向上两级)。称其为 $KIT。每个工具都在你为此表演者创建的项目目录中运行;源视频被引用,但不会被复制。

在开始之前,先阅读一次 references/how-it-works.md。它解释了整个流水线依赖的三个核心概念:身体层与火焰层分离、曝光处理、以及脚部锚点归一化。

0. 环境搭建(每台机器仅一次)

cd $KIT && python3 -m venv .venv && .venv/bin/pip install -r requirements.txt

请使用该机器的原生 Python 构建(在 Apple Silicon 上,x86 Python 会静默安装仅支持 CPU 的旧版 PyTorch)。ffmpeg 和 ffprobe 必须在 PATH 环境变量中。强烈建议使用 GPU(Apple MPS 或 CUDA):在 M2 Max 上,渲染速度约为每输出帧 3 秒。模型权重将在首次使用时自动下载。

以下所有命令中,py 均代表 $KIT/.venv/bin/python,且命令需在项目目录中运行。

1. 获取正确的素材

要求表演者提供原始相机文件,而非经过剪辑或社交媒体导出的版本。检查他们指向的文件夹:一个 4K、10-bit、50 fps 的原始文件往往与一个 720p 的最终剪辑版放在一起,所有下游流程都从原始文件获益。同时询问是否有在点火前走路或站立的素材:火焰套路很少包含干净的行走循环,而游戏通常需要行走动画。

mkdir -p ~/sprite-projects/NAME && cd ~/sprite-projects/NAME
py $KIT/tools/ingest.py main "/path/to/original.mov"      # 对其它片段重复使用其他名称

阅读 ingest 的输出。它会测量真实的黑电平(文件范围标签不可靠),并警告 8-bit 源、低分辨率以及可变帧率。可变帧率必须首先修复(重新编码为恒定帧率),否则代理文件和源之间的帧号会偏移。

2. 查找可用素材

py $KIT/tools/pose_pass.py main                             # 慢:约每秒 15 代理帧
py $KIT/tools/find_segments.py main --strips                # 如果镜头中有穿衣服的人群,添加 --performer skin
py $KIT/tools/find_bursts.py main                           # 火焰呼吸,通过亮度检测
  • find_segments 保留整个身体在画面内且直立的部分。预计只有一部分素材符合条件:手持相机经常切掉脚部。这很正常;将筛选结果的数量告知表演者。
  • 亲自查看几张 strips/*.jpg。如果它们追踪错了人,请切换为 --performer 模式。
  • 查看 bursts/main.jpg。仅保留真正的火焰呼吸,然后运行 py $KIT/tools/catalog.py add-bursts main(并从 catalog/selected.json 中删除任何错误条目)。火焰呼吸之所以用这种方法检测,是因为基于姿势的搜索会拒绝过曝帧。

3. 编目动作(使用子代理)

py $KIT/tools/catalog.py batches 5

将每个批次交给一个子代理,使用 references/catalog-prompt.md 中的提示(填入批次号,并用一行描述表演者,以便审核者能拒绝错误的人)。他们阅读带帧编号的胶片条,并写入 catalog/outK.json。这是最能从并行代理中受益的步骤:纯粹依赖视觉判断,且每个批次独立处理。然后:

py $KIT/tools/catalog.py select            # 短名单:质量 >= 4,以及质量等级为 3 的行走/转身/旋转/打击动作
py $KIT/tools/catalog.py list

向表演者简明地汇报发现了什么、没发现什么(例如:“13 个静止动作,8 个旋转,但只有一个真正的行走动作,来自点火前的那段素材”)。

4. 表演者修剪与选择

py $KIT/tools/make_trim.py                 # 每个动作生成一个上下文片段 + trim.html
open trim.html

审核者给出的范围故意很紧;真实的动作需要在其前后保留一些缓冲空间。在 trim.html 中,表演者拖动每个动作的起始和结束点(覆盖几秒钟的周围素材),标记“保留”或“丢弃”,并从页面底部的框中复制列表。请他们将列表粘贴给你。该页面将状态保存在浏览器中,因此你无法直接读取。将粘贴的文本保存到文件中,然后:

py $KIT/tools/catalog.py apply-trim kept.txt

5. 渲染、打包、审查

py $KIT/tools/render_move.py --kept        # 长时间运行:在后台执行
py $KIT/tools/pack.py --kept
open review.html

在汇报之前,亲自查看几个 moves/NAME/preview.jpg 文件。需要检查并说明的问题:

  • 有其他人混入了抠图中(如果该动作没有道具,可以在 catalog/selected.json 中将对应动作的 "gate": true 设置为 true,然后使用 --force 重新渲染);
  • 火焰层中出现了被火光照亮的墙壁;
  • 脚部或头部被裁剪:render_move 会输出每个范围中全身在画面内的占比。扩展的修剪往往会进入表演者离开画面的素材。

review.html 可以播放每个动作,并切换背景和图层,包括“身体 + 火焰发光叠加”,这是游戏应绘制的方式。atlas.json 包含每个动作的帧网格、fps、脚部锚点和源范围。

6. 可选:8-bit 风格

如果他们想要复古版本,请使用 fire-sprites-retro 技能。

本工作的诚实守则

  • 报告计数和限制,而不仅仅是成功:可用的秒数、哪些动作有肢体裁剪、哪些火焰层包含了墙壁。
  • 素材本身设定了硬限制。火焰烟雾离开相机帧会产生直边;过曝的火焰没有任何内部纹理可供恢复。如实说明,而不是承诺可以修复。
  • 切勿将表演者的素材、姓名或渲染后的精灵图集公开发布。输出内容仅保留在项目目录中,除非表演者另有要求。

参见 references/troubleshooting.md 了解实际遇到的问题及其解决方法。

相关技能