Communitygithub.com

anime-reel / 动漫短片制作器

根据脚本和每句对应的语音MP3,生成原创动漫风格的短片(9:16竖版和16:9横版),角色完全由代码绘制,支持口型同步。适用于运行 /anime-reel 或要求制作动漫短片、动漫风格卡通、口型同步动漫角色的场景。

动漫短片制作器 是什么?

anime-reel 技能能够将用户提供的脚本和每句语音 MP3 自动生成为一段 9:16 竖版(Reels 格式)和一段 16:9 横版(YouTube 格式)的动漫风格短片,并额外生成一个低于 20 MB 的 720p 副本用于 WhatsApp 分享。其核心特点是所有画面均由 HTML Canvas 代码逐帧渲染(在 headless Chrome 中执行),不依赖任何素材库或图像生成器;口型同步通过 torchaudio 的 MMS_FA 强制对齐算法实现精确到单词级别的时序,杜绝猜测。该技能内部包含一整套处理流程:检测环境依赖、将脚本拆分为镜头(每个镜头包含角色、地点、摄像机运动等属性)、定义原创角色(包括肤色、发型、服装等)、通过 loudness 曲线驱动口型张合、自动添加动漫特效(速度线、冲击帧、震动、Q 版化等)、生成联系人样张供用户确认,最后渲染并编码出最终视频。它主要适用于 Claude Code、Cursor 等支持 Agent 技能的开发环境,目标是让用户基于文本和音频输入快速获得风格一致、口型同步的动漫短片。

兼容平台~Claude Code~Codex CLI~Cursor
npx skills add akokbaba195-bot/anime-reels

在你喜欢的 AI 中提问

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

文档

anime-reel

输入:一个脚本 + 每句对应的 MP3 语音(用户一起提供)。输出:一个 9:16 竖版和一个 16:9 横版视频,均保留原始音频,外加一个低于 20 MB 的 720p 副本用于 WhatsApp。

硬性规则(每次运行必须遵守)

  • 所有画面均用代码绘制:HTML Canvas,在 headless Chrome 中逐帧渲染,使用 ffmpeg 编码。不使用素材片段,不使用图像生成器。以 engine/ 为基础;扩展它,不要替换它,以保持每次运行时外观一致。
  • 使用强制对齐(torchaudio MMS_FA,通过 scripts/align.py)为每个单词计时。绝不猜测时间。如果某句对齐失败,则停止并告知用户原因;不要回退到均匀间隔。
  • 在完全渲染前生成一份静态帧样张并等待用户批准。
  • 覆盖任何已有文件前必须询问。encode.sh 拒绝覆盖并退出码 2;请将此信息告知用户。
  • 最终 MP4 中保持原始音频不变(语音线仅放在时间线上,绝不重新处理)。除非用户要求,否则不添加背景音乐。

方法

  1. 环境检查。 运行 bash scripts/check_setup.sh(检查 ffmpeg、Node、puppeteer、torch/torchaudio、uroman)。修复任何缺失的项目后再继续。运行 bash scripts/sfx.sh <project>/sfx 用 ffmpeg 合成打击/呼啸/冲击/弹跳音效。
  2. 将脚本拆分为镜头。 每句语音对应一个镜头。为每个镜头编写:id(标识)、speaker(说话者)、text(MP3 中说的准确文本)、audio(音频路径)、place(地点:屋顶、办公室、街道、卧室、天空,或新增 drawPlace 分支)、camera(static|push|pull|pan + amount 数值)、cast(角色)、slots(左/中/右位置)、以及 fx(特效)。保存为 shots.json(模式定义在 scripts/build_timeline.py 中)。显示镜头列表,如果存在歧义让用户修正。
  3. 角色。 在 characters 中定义每个角色(name 名称、skin 肤色、hair 发色、hairStyle 发型 spiky|bob|long|short、eye 眼色、outfit 服装、accent 口音、color 该角色字幕颜色)。角色必须是原创,绝不能复制现有动漫。动漫风格:大眼睛带高光、粗而清晰的轮廓、平涂着色加恰好一层阴影。渲染角色表并将 JSON 作为唯一数据源,确保角色在不同镜头间不变: node scripts/render_frames.mjs sheet timeline.json landscape out/character_sheet.png
  4. 对齐与口型同步。 python3 scripts/build_timeline.py shots.json timeline.json work 对每句运行 MMS_FA(单词级时序)并根据该语音线的响度构建每个角色的嘴张曲线(mouth.py)。眨眼和待机动作已内置于引擎中。对于非英语台词,align.py 使用 uroman 进行罗马化,同时在屏幕上保留原始拼写。
  5. 关键句动漫特效(添加到 fx,时间单位为从镜头开始起的秒数):在揭示和决心场景添加 speedlines(速度线),在最重要台词添加 impact(白/黑闪帧,带 sfx: "impact" 音效),在打击场景添加 shake(震动),在喜剧反应场景添加 chibi(Q 版化,带 who 角色和 sfx: "pop" 音效)。谨慎使用:大约每 2-3 个镜头使用一个特效,这样才能保持冲击力。
  6. 字幕与声音。 引擎已处理 2-3 词字幕,其中说话者的词用其角色颜色显示,其余词为白色。音效与视觉冲击的 cue 点同步(通过 fx[].sfx)。使用 python3 scripts/build_audio.py timeline.json work/audio.wav 混音。
  7. 静态帧样张,然后批准。 挑选大约 12 个时间点分布在整段视频中,必须包含每个特效: node scripts/render_frames.mjs stills timeline.json portrait work/stills 0.5,2.0,... bash scripts/contact_sheet.sh work/stills out/contact_sheet.png 显示 out/contact_sheet.png 并停止。在用户批准前不要渲染完整视频。
  8. 批准后渲染,针对每个方向(portrait 竖版 = 1080x1920,landscape 横版 = 1920x1080,30 fps): node scripts/render_frames.mjs video timeline.json portrait work/reel_silent.mp4 bash scripts/encode.sh work/reel_silent.mp4 work/audio.wav out/<名称>_9x16 对横版重复,使用 out/<名称>_16x9。encode.sh 混入 AAC 256k 音频并写入 _720p.mp4 副本(目标约 17 MB,始终低于 20 MB)。使用 ls -lh 检查文件大小并报告。

渲染设置

  • 9:16:1080x1920,30 fps,H.264 yuv420p,CRF 16,AAC 256k,faststart。16:9:1920x1080,相同设置。
  • WhatsApp 副本:720p(720x1280 或 1280x720),码率根据时长计算以保持低于 20 MB。
  • 字幕位置:9:16 中约在画面 68% 高度(避开顶部 250 px 和底部 420 px 应用 UI),16:9 中约在 86% 高度。

技能包含的文件

  • engine/engine.js、engine/index.html:Canvas 引擎(角色、地点、速度线、冲击帧、震动、Q 版、字幕、徽章)。
  • scripts/:check_setup.sh、sfx.sh、align.py、mouth.py、build_timeline.py、build_audio.py、render_frames.mjs、contact_sheet.sh、encode.sh。

相关技能