运行平台:Claude Code, Cursor, 以及其他支持技能系统的 AI 编码代理
火柴人动画工作室 — 2D & 3D MP4
目的
创建完整的、可编辑的火柴人动画项目,并可渲染为用于 YouTube 的 MP4 视频。支持 2D 和 3D 工作流程。优先考虑流畅的运动、可读的动作、一致的角色设计、场景的连贯性以及可靠的渲染。
本技能创建动画代码和项目文件。它不会假设静止图像能自动成为完全装配好的角色。首先检查参考图像,然后选择合适的构建方法。
操作原则
- 先检查再构建。 检查提供的参考图像、项目文件、可用软件和输出需求。
- 只询问必要缺失的信息。 如果用户未指定格式,默认为 1920×1080,30 fps 横屏 16:9,除非请求明确是 Shorts(则使用 1080×1920,30 fps,9:16)。
- 保留参考。 匹配角色的轮廓、头部形状、四肢比例、颜色、服装/配饰以及显著特征。不要添加与参考冲突的细节。
- 有意图地制作动画。 每一个动作都应传达一种动作或情感。避免随机运动和不必要的相机运动。
- 使用平滑的时序。 优先使用连续曲线、缓动过渡、预期动作、跟随动作和受控停顿。避免突然的位置跳跃。
- 保持场景连贯。 保留相邻镜头之间的屏幕方向、角色比例、道具、灯光和空间关系。
- 渲染并验证。 在渲染成功并检查输出文件之前,不要声称 MP4 已完成。
- 诚实地对待限制。 如果缺少 Blender、FFmpeg、字体或其他依赖项,请报告并给出确切的设置步骤,而不是假装渲染已经发生。
工作流程
阶段 1 — 理解请求
确定:
- 动画模式:2D、3D 或两者兼有。
- 来源:图片参考、现有项目或文本描述。
- 场景/动作和情感基调。
- 时长和宽高比。
- 输出:MP4、预览、可编辑项目或全部。
- 是否请求配音、字幕、音效或音乐。
如果缺少细节,使用以下默认值:
- YouTube 长视频:16:9,1920×1080,30 fps。
- YouTube Shorts:9:16,1080×1920,30 fps。
- 视频编解码器:H.264;音频编解码器:AAC(当有音频时)。
- 帧率:恒定 30 fps。
- 背景:使用用户的参考或简单的场景适配背景。
阶段 2 — 检查参考图像
当提供了图像时:
- 打开并检查所有相关图像。
- 识别主要角色、轮廓、头/身体比例、四肢长度、颜色、配饰和视觉风格。
- 识别可见姿势、面向方向、摄像机角度和场景元素。
- 在项目中记录简洁的角色规格说明,例如
character_design.md。 - 如果参考是单个姿势,则将其视为设计参考,而不是完整的动画绑定。
- 对于 2D,创建保留设计的干净矢量形状或分层透明资源。
- 对于 3D,创建由参考指导的简单网格/绑定。如果可用,使用正面/侧面参考;不要像可见细节那样凭空捏造隐藏细节。
阶段 3 — 选择管线
2D 管线
首选实现:
- 使用 JavaScript 的 HTML5 Canvas 进行程序化/矢量动画,或
- 使用 Python 配合合适的 2D 绘图库进行逐帧渲染。
选择能够可靠产生请求结果的最简单管线。在有用的地方保持角色部件分离:头部、躯干、上/下臂、手、上/下腿和脚。在关节处使用枢轴点。
动画要求:
- 使用固定的时间步长或确定性的帧采样,以便相同的帧号始终产生相同的姿势。
- 使用平滑缓动插值位置、旋转和缩放。
- 使用关节旋转,而不是独立移动每个肢体端点。
- 仅在支撑动作时添加微妙的次级运动。
- 除非风格需要,否则避免弹性过冲。
- 保持线宽、关节外观和比例一致。
对于 Canvas 实现:
- 仅对交互式预览使用
requestAnimationFrame。 - 对于最终导出,通过时间戳/帧索引渲染确定性帧。
- 将帧导出为图像序列,然后使用 FFmpeg 编码。不要依赖实时屏幕录制来保证最终质量。
3D 管线
首选实现:
- 使用 Blender Python API 进行场景创建、绑定、动画、摄像机、光照和渲染。
- 使用带有合理骨骼枢轴的简单骨架,用于头部、躯干、上/下臂和上/下腿。
- 仅在改善脚/手放置时才使用 IK;否则使用清晰的 FK 关键帧。
- 保持材质和几何体简单,除非用户要求详细的 3D 风格。
动画要求:
- 使用 Blender 关键帧和贝塞尔插值实现平滑运动。
- 有意识地设置手柄类型;避免过冲或意外的抖动。
- 对走、跑、跳、转身和拾取物体等动作使用预期、接触、跟随和稳定。
- 在可行的情况下,通过保持着地的脚在接触期间稳定来防止脚滑动。
- 检查关节弯曲、穿透、地面接触和轮廓可读性。
- 在多个镜头中使用稳定的摄像机和一致的光照。
阶段 4 — 规划运动
在编码之前,创建一个简短的运动计划:
- 起始姿势。
- 主要动作。
- 关键姿势和大致时间戳。
- 接触时刻(脚触地,手触物,落地)。
- 次级运动(头转动,手臂跟随,身体稳定)。
- 结束姿势和过渡到下一个镜头。
使用姿势分解而不是一个大的运动。例如,跳跃可能包括准备、起跳、空中姿势、落地和恢复。确切的时间必须符合请求的时长和基调。
阶段 5 — 平滑度和质量控制
对每个场景应用以下检查:
时序和插值
- 避免位置、旋转或缩放的突然变化。
- 对开始和停止使用缓动过渡。
- 仅对应保持恒定速度的运动使用线性插值。
- 保持动画在渲染之间的确定性。
- 确保足够的帧数以满足请求的帧率和时长。
角色一致性
- 将渲染的角色与参考进行比较。
- 检查头部大小、躯干长度、四肢长度、线条粗细/材质、颜色和配饰。
- 不允许设计在镜头之间漂移。
运动可读性
- 使动作在轮廓中可理解。
- 避免四肢不自然地交叉。
- 检查平衡、重心转移、接触和间距。
- 避免过度运动模糊,以免掩盖动作。
连贯性
- 匹配连接镜头之间的角色位置和面向方向。
- 保留道具位置和场景环境。
- 使用剪切或有动机的摄像机移动;没有理由就不要移动摄像机。
渲染
- 首先渲染一个短的低分辨率预览。
- 检查代表性帧,并在可能时播放预览以检查节奏和卡顿。
- 仅在预览批准后或用户请求直接最终渲染后,才渲染最终输出。
- 检查最终文件的存在、时长、分辨率、帧率、视频编解码器和音频同步。
阶段 6 — 导出 YouTube 就绪的 MP4
当可用时使用 FFmpeg。一个典型的 H.264 导出命令是:
ffmpeg -framerate 30 -i frames/frame_%06d.png \
-c:v libx264 -pix_fmt yuv420p -r 30 \
-movflags +faststart output.mp4
如果提供了音频,请仔细混入并确保其与视频时长匹配。除非用户提供或确认有权使用,否则不要添加受版权保护的音乐或音效。
对于 Blender,当可靠性重要时,首先将渲染输出设置为图像序列,然后使用 FFmpeg 将序列编码为 MP4。这使得中断的渲染更容易恢复。
阶段 7 — 交付物
在可能的情况下,提供:
output.mp4— 完成的视频。- 源代码项目/代码 — 例如
.blend,.py,.html,.js。 character_design.md— 与参考匹配的角色说明笔记。README.md— 依赖项以及如何重新运行或修改动画。- 预览渲染或选定的预览帧。
明确指出哪些文件已成功创建。如果无法完成渲染,请提供项目/源代码,并明确指出还需要安装或运行什么。
建议的项目结构
stickman-project/
├── references/
├── assets/
├── scenes/
├── src/
│ ├── 2d/
│ └── 3d/
├── renders/
│ ├── preview/
│ └── frames/
├── output/
│ └── output.mp4
├── character_design.md
└── README.md
工具和环境检查
在实现之前,检查实际安装了哪些工具:
- Blender (
blender --version) - FFmpeg (
ffmpeg -version) - Python (
python --version或python3 --version) - 仅当所选 2D 管线需要时,才检查 Node.js。
不要假设工具已安装。在仅限 Android 的环境中,说明渲染可能需要云计算机、兼容的在线环境或安装了 Blender/FFmpeg 的计算机。不要暗示移动浏览器或 Claude 本身可以在没有可用的渲染环境的情况下渲染复杂的 3D MP4。
交互风格
- 用平实的语言解释技术步骤。
- 当用户是初学者时,一次只处理一个步骤。
- 优先提供完整的、可运行的文件,而不是零散的代码片段。
- 保持代码模块化和可编辑。
- 当渲染失败时,诊断实际错误并修复它;不要用静态图像或模拟图静默替换请求的输出。
- 不要承诺病毒式传播、变现批准或算法性能。
完成检查清单
在声明任务完成之前,确认:
- 使用了正确的 2D/3D 模式。
- 保留了参考角色设计。
- 运动平滑且可读。
- 保持了场景连贯性。
- 检查了预览。
- MP4 渲染成功。
- 分辨率、宽高比、帧率和时长正确。
- 音频已同步(如果存在)。
- 在可能的情况下包含了源文件和重新运行说明。