关于 zach-d-films
zach-d-films 是用于制作风格化程序化 3D 短视频的 Claude Code 技能,提供可复用的镜头引擎和制作流程,将脚本与配音转为成片。
主要功能
- 01程序化 3D 场景与角色
- 02可复用道具和动画辅助工具
- 03字幕与镜头时序流程
- 04静帧预览和视频渲染
适用场景
- 01制作解释常见误解的短视频
- 02用慢动作和特效呈现冲击
- 03将脚本和配音制作为竖屏短片
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ artemnovitckii/ claude-animation-skills --skill zach-d-films安装后在 Claude Code 中输入/zach-d-films确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
engine/captions.pyindex.htmlrender.mjsengine/src/anim.jshuman.jsmain.jsmaterials.jsprops.jsshots.jstextures.js详细介绍
/zach-d-films
┌──────────────────────┐
│ blue sky │ procedural 3D people and props, soft shadows
│ ◕‿◕ ⛨ │ depth of field, bloom, light grain
│ /▓▓▓\ ⟶ • │ slow-motion impacts, sparks, a red force ripple
│ ▓▓ │
│ arrows │ 1-3 word captions, white bold, lower third
└──────────────────────┘
附带一个完整示例:engine/ 是一部完成的 29.5 s 短片《古代盔甲能挡住子弹吗?》(9 个镜头:开枪、子弹慢动作击中背心后变扁、剑砍锁子甲、钉头锤击中板甲并泛起红色波纹、弓箭手、射出的箭和一声尖叫、一颗子弹穿过两个靶架)。它不包含配音,因此你需要自己提供配音。本项目与 Zack D. Films 无关;“这种风格”指的是这种形式:提出问题、纠正误解、用一个“But”转折、逐步展示案例,最后揭晓结果。
首次使用
Claude Code 加载此技能时显示的“Base directory”就是该技能的文件夹。
SKILL_DIR="<base directory of this skill>"
KIT=$(python3 -c 'import os,sys;print(os.path.realpath(os.path.join(sys.argv[1],"..","..","kit")))' "$SKILL_DIR")
[ -d "$KIT/node_modules/playwright" ] || bash "$KIT/setup.sh"
[ -x "$KIT/.venv/bin/python" ] && [ -d "$KIT/models" ] || bash "$KIT/setup.sh" --voice # word timings + free voice, ~1 GB once
PY="$KIT/.venv/bin/python"
需要 ffmpeg、Node 和 Python 3.9+。它在无头 Chrome 中使用 WebGL 渲染:在 Mac 上每帧约需 0.2 到 0.5 s,一部短片需要几分钟。若设备没有可用的 GPU,请设置 GL=swiftshader(速度会慢很多)。
引擎
| 文件 | 内容 |
|---|---|
src/shots.js | 剪辑内容。 CAPTIONS([start, text, end?])、FADES(淡入黑场)、DURATION、每个镜头对应的一个函数,以及 SHOTS 列表({start, end, build})。镜头的 build({makeStage}) 会返回 {scene, camera, update(t)};update 接收镜头内的时间,并可返回 {dof, bloom, exposure}。 |
src/human.js | makeHuman(outfit):可摆姿势的卡通人物('vest'、'chainmail'、'plate'、'knight'、'archer')。使用 setPose({joint: [x, y, z]}) 设置 pelvis spine chest neck head lSh lEl lWr rSh rEl rWr lHip lKn lAn rHip rKn rAn(以及 drop),setMouth(0..1) 设置嘴部,lerpPose(a, b, t) 进行姿势插值,standArmor(kind) 设置盔甲展示架。 |
src/props.js | pistol、gunArm、bullet(带有变扁形变)、sword、shield、mace、arrow、bow、stand、glowSprite、sparks、streak、rippleOverlay(红色冲击波纹)。 |
src/anim.js | kf 关键帧、缓动函数、range、cam(fov)、place(camera, pos, look)、shake、ikArm(双骨骼手臂 IK,让手可以抓取物体)。 |
src/textures.js、src/materials.js | 使用 Canvas 制作的钢铁刮痕、锁子甲环、木材、织物、皮肤纹理,以及基于这些纹理构建的材质。 |
src/main.js | 渲染器、天空、光照、景深、泛光、色彩分级,以及 window.renderAt(t)。 |
步骤
- 脚本。 使用用户提供的脚本,或按以下格式撰写:“如果你……”钩子、“有些人认为……”、“但”转折、逐步展开的示例、作用机制,以及回应钩子的结尾。每秒约 2.5 个词(30 秒约 70 到 90 个词)。核查事实。
- 项目。 将引擎复制到新文件夹(
<project>必须尚不存在),并链接共享软件包:
将脚本写入cp -R "$SKILL_DIR/engine" <project> && ln -s "$KIT/node_modules" <project>/node_modules<project>/script.json,格式为句子列表。 - 配音。 最好使用用户自己的录音;用
ffmpeg -i <take> -ac 1 -ar 44100 <project>/audio/vo.wav转换。否则,在项目目录中使用免费的 Kokoro 音色:"$PY" "$SKILL_DIR/../stick-figure/engine/tools/tts_kokoro.py" [voice] [speed](默认值为am_michael 1.12;也可用af_heart、am_adam、bm_george),生成audio/vo_kokoro.wav;将其复制到audio/vo.wav。仅用于浏览器预览时,还要将其另存为audio.m4a(main.js会播放该文件)。 - 字幕。
"$PY" "$KIT/words.py" audio/vo.wav script.json会生成audio/vo.words.json(配音文件名加上.words.json)。然后运行python3 captions.py audio/vo.words.json,它会打印CAPTIONS和DURATION,将这两项粘贴到src/shots.js中对应的位置。围绕“但”的转折设置FADES(示例在 6.2 秒时淡暗),或设为[]。 - 镜头。 每隔 2 到 4 秒规划一个镜头(30 秒的视频规划 8 到 10 个,10 秒的视频规划 3 个),在字幕节拍处切镜头,作用机制的镜头最长。复制最接近的示例,为每个镜头编写一个函数,修改道具、姿势和相机设置,并在
SHOTS中列出镜头的开始和结束时间(删除未使用的示例函数)。update(t)必须仅依赖t:渲染可能从镜头中途开始。示例镜头 7 会在帧间保留状态,需要变通处理,因此不要照搬这种模式。shots.js中的实用辅助函数:standPose、STAND、handsOnHips、surfaceHit(投射物与网格相交的位置)。props.js中的辅助函数:box、shadow。rippleOverlay需要附着在一个网格上;若目标由多个部分组成,为其添加一个不可见圆盘(关闭阴影)。- 新道具应在
props.js中编写为返回THREE.Group的小型函数。sparks是发光点,因此碎片或灰尘需要使用独立的网格。 - 9:16 画面较窄(fov 为 34 时宽约 19°)。为让投射物留在画面内,镜头应跟随在它后面。
- 人物面部和关键道具应避开字幕区域(1280 高度中约 y=950 到 1030 的位置),并远离画面边缘。
- 静帧。 在项目目录中运行:
node render.mjs stills 1.5,6.8,14 stills。完整渲染前检查每个镜头。 - 渲染。 运行
node render.mjs video silent.mp4 30(每帧约 0.2 到 0.5 秒),然后添加配音、调整音量并缩放至 1080x1920:ffmpeg -i silent.mp4 -i audio/vo.wav -map 0:v -map 1:a -vf scale=1080:1920:flags=lanczos -c:v libx264 -crf 17 -pix_fmt yuv420p -af "apad,loudnorm=I=-14:TP=-1.5" -c:a aac -b:a 192k -shortest <name>.mp4 - 交付 mp4 文件路径。
如需实时预览,可通过 python3 -m http.server 8000 提供项目服务并打开 index.html(点击即可播放 audio.m4a),也可打开 index.html?t=14.5 查看单帧。
风格
- 明亮的蓝色摄影棚天空、柔和的日光,以及看起来像金属的金属材质。卡通人物由简单形状构成,面部表情丰富;人物比例应与道具协调。
- 撞击时使用慢动作,配合短暂的镜头抖动、火花,以及炽热物体上的泛光。红色涟漪表现力的扩散。
- 根据字幕节拍快速切镜头;在“但”的转折处淡入黑场一次。字幕为白色粗体,每条 1 到 3 个词。
评论
支持 Markdown