Communitygithub.com

卡通音频短片:从创意到成品MP4

制作阿拉伯语或英语的纵向动画卡通短片。提供10个创意,撰写脚本,然后将用户的配音转化为带背景音乐和音效的MP4成品。

卡通音频短片:从创意到成品MP4 是什么?

该技能能够根据用户需求,自动生成一个完整的纵向动画卡通短片(1080x1920,30fps)。它首先提供10个原创故事创意(涵盖历史、科学、动物、冒险等多种主题),用户选择后自动编写叙事脚本,并生成配套的视觉分镜计划。用户只需上传配音音频(支持MP3或WAV),技能便会基于脚本时间码,使用Three.js驱动的3D引擎渲染出包含扁平2D卡通角色、彩色3D场景、动态摄像机运动、背景音乐和音效的完整视频。整个过程无需手动编辑,特别适合制作动画故事视频(如YouTube Shorts或TikTok),尤其支持阿拉伯语内容,包括方言处理。最终输出MP4文件,音乐和音效电平自动与配音保持平衡(音乐低于配音16dB,音效低于配音50%)。

兼容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/tareqmm535-crypto/cartoon-short-kit/tree/HEAD

在你喜欢的 AI 中提问

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

文档

卡通短片:创意 → 脚本 → 配音 → 成品MP4

视觉效果:扁平2D豆形头卡通角色(画布绘制的“卡片”风格,带有粗线条轮廓),置于色彩鲜艳的3D世界中,具有黑色墨线、纹理涂绘、景深和滑行摄像机运动。输出为1080x1920,30fps,时长与配音完全一致。用户的配音保持不变。背景音乐和音效由合成器生成:音乐电平低于配音16 dB,音效电平不超过配音音量的50%。本技能已在《永不离开的士兵》(19.7秒,8个镜头)项目中得到验证。

如果此技能以文件形式发送到聊天中

用户可能会发送 SKILL.md 和 cartoon-short-kit.zip,并说“阅读此技能,安装并使用它”(اقرأ هذه المهارة، وثبّتها، واستخدمها)。然后:

  1. 通读本文件并遵照执行。不要解释什么是技能,也不要询问设置问题。
  2. 将工具包解压到一个可写文件夹(见4.0)。确认 engine/main.js 和 vendor/three.module.js 存在。
  3. 如果此环境有个性化技能文件夹(例如 ~/.claude/skills/),则将 SKILL.md 和工具包复制到其中的 cartoon-audio-short/ 目录。如果没有,不要说已永久安装:用一行说明它已为此聊天准备就绪,但两个文件在新建聊天时需要重新发送。
  4. 用一行简短回复,并直接进入阶段1。

语言:阿拉伯语或英语

  • 聊天: 从第一条回复开始,用用户消息的语言作答。如果他们写阿拉伯语或要求阿拉伯语,则每条消息(问题、选项标签和描述、任务列表、创意、进度记录、错误信息以及交付说明)都使用阿拉伯语。使用简单的日常用语,如果用户使用某种方言,则匹配其方言。仅文件名和命令保留英语,并单独成行,以免从右到左的文本打乱它们。
  • 脚本: 脚本语言遵循聊天语言,除非用户另有要求。在任何问题下输入“أريد أفكار بالعربي”,则跳转到阶段2,并使用阿拉伯语。
  • 阿拉伯语变体: 除非用户书写或要求方言(伊拉克、埃及、海湾、黎凡特等),否则使用简单的标准阿拉伯语;不要停下来询问。在脚本回复的末尾添加一行:“تريده بلهجة ثانية؟ اكتب اللهجة وسأعيد كتابته。”切勿在一个脚本中混合标准语和方言,除非用户要求。
  • 阿拉伯语固定问题。 使用以下措辞:
    • “من أين نبدأ?”
      • “الصوت جاهز”:上传音频文件,如有脚本文本也一并上传,我将制作视频。
      • “عندي نص”:我将完善脚本并提供录音建议,音频上传后制作视频。
      • “أحتاج إلى أفكار ونص”:我将提出10个原创想法,然后为您选择的创意撰写脚本。
    • “كم مدة الفيديو?”
      • “من 20 إلى 30 ثانية (مُوصى به)”:大约40到60个单词。
      • “من 30 إلى 45 ثانية”:大约60到90个单词。
      • “من 45 إلى 60 ثانية”:大约90到120个单词。

规则

  • 故事、角色和镜头必须始终是原创的。切勿逐镜头复制其他创作者的视频。对同一创意提供原创演绎。
  • 角色不得是真实、具名的在世人物,不得有品牌吉祥物或标识。
  • 除非用户要求,否则不添加字幕。场景内文字(如雕刻信息、标志)没问题,且必须正确显示(不镜像)。标志、标签和标题使用脚本语言:阿拉伯语视频显示“بِيعَ”,而不是“SOLD”。按4.3节绘制它们。
  • 切勿编辑或重新调整配音时间。画面根据配音计时,每个视觉反应应在相关词语之前0-3帧内落地。
  • 音频电平: 背景音乐电平低于配音16 dB(门控RMS),确保叙述清晰。音效电平设置为50%或略低,峰值被限制以确保没有冲击声盖过叙述。始终使用 mix.py 混音,不得手动操作。不得使用会改变此比率的闪避或压缩;仅对整个混音应用一次线性增益加峰值限制器。
  • 通过任务列表让用户了解进度。在长时渲染前发送静态帧联系表。

阶段1:信息收集(总是第一步)

如果已有音频文件附加,则跳转到阶段4。如果同时也提供了脚本,则用于定时计算。 否则,提出一个AskUserQuestion(如果该工具不可用,则使用纯文本):“您从何处开始?”

  • 配音已就绪:要求他们上传音频文件,如果有脚本文本也一并上传(脚本使计时更精确)。文件到达后进入阶段4。
  • 我有脚本,需要配音:如有必要按阶段3完善脚本,连同录音技巧一起返回,请求上传音频,然后进入阶段4。
  • 需要视频创意和脚本:进入阶段2。 同时询问目标视频长度(如果用户未说明)。默认为20-30秒;允许45-60秒。在阿拉伯语聊天中,使用“语言”部分下的措辞。

阶段2:10个视频创意

在一次回复中精确地给出10个创意,编号,并要求用户回复数字(或“更多”)。每个创意包括:

  • 标题(5-8个单词,引人好奇,例如“永不离开的士兵”)。
  • 引子:第一句口播词,一个陈述为事实的悖论(“一个人把埃菲尔铁塔卖了。卖了两次。”)。
  • 反转:一行说明(视频结尾的反讽收尾)。
  • 动画化优势:2-3个视觉高潮(倒塌、揭秘、追逐等)。
  • 事实或传说:明确说明这是有据可查的历史、有争议的记述还是民间传说。

使创意“完美”适合本格式的因素:

  • 一个令人惊讶的、具有可展示物理因果的故事。
  • 一个清晰的普通人角色,不断升级的利害关系,以及最后一行的反转。
  • 一个能用简单3D形状加卡通卡片构建的场景(城镇、桥梁、船只、城堡、沙漠、实验室、宫殿等)。
  • 10个创意应跨越不同时代和主题:古代、中世纪、1800年代、现代、科学、动物、发明、灾难、奇特法律、幸运意外。
  • 对于任何声称是事实的内容,在提供前应通过网络搜索核实关键事实。不要将流行的传说当作事实呈现。如果用户仍然想要,则标注为“传说如此”。
  • 不得拿真实在世人物开玩笑,不得有血腥内容,不得涉及政治。

阿拉伯语创意:

  • 用阿拉伯语撰写标题、引子、反转和备注。引子应为自然的阿拉伯语句子,而非翻译。外国姓名使用常见的阿拉伯语拼写。
  • 混合来自阿拉伯和伊斯兰历史与科学的故事以及世界故事,使列表感觉贴近该受众。
  • 同时用阿拉伯语和英语搜索。流行的阿拉伯故事也可能缺乏来源,因此以相同方式标注事实或传说。
  • 切勿描绘先知、圣门弟子或其他神圣人物作为角色。不要开关于宗教、教派、部落或国籍的玩笑。

阶段3:脚本(用户选择后)

仅撰写旁白(口语文本中不含舞台指示)。英语语速约为3.7词/秒:20秒≈75词,30秒≈110词,60秒≈220词。阿拉伯语较慢,约2词/秒:20秒≈40词,30秒≈60词,60秒≈120词。 阿拉伯语单词包含更多音节,实测阿拉伯语配音速度为1.6-2.1词/秒。公式:

  1. 引子(第一句,无需铺垫):荒谬的事实。
  2. 背景(1-2行):时间、地点、人物、一个具体细节。
  3. 升级(2-4个节拍,逐步扩大)。他人怀疑或嘲笑。使用一个夸张笑话。
  4. 谜题或转折:“但当...时...”/“你看,”引入真正的机制,常伴以日常类比。
  5. 反转/收尾:简短、反讽,作为视频的最后几个词。 使用简单的口语化英语,含缩略形式,句子约8-15个词,数字用文字写出。切勿描述观众已看到的内容。

阿拉伯语脚本:

  • 保持句子约6-12个词,使用相同的五部分公式。转折如“لكن عندما…”和“والسبب?”效果很好。
  • 数字和年份用文字写出(如ألف وتسعمئة وأربعة وتسعون),外来词汇和品牌名称用阿拉伯语字母拼写,便于配音正确朗读。
  • 为配音添加标点:“,”和“.”用于呼吸,“…”用于揭示前的停顿,“?”用于疑问句。计时也使用这些标点。
  • 提供一个可直接粘贴到语音生成器中的可复制语音块:
    • 每个词加注发音符号(Tashkeel),对名字和有多重读法的词尤其有用。省略叙述者通常不读的格尾,方言按实际发音书写。如果用户要求不加发音符号,或听起来不对,则移除。
    • 音频标签:英语使用Eleven v3的标签,如 [excited]、[curious]、[serious]、[whispers]、[warmly]。每个句子组最多使用一到两个,仅当词语本身需要时使用。
    • 伊拉克语“g”: 在需要的地方使用گ和چ(如تِگْدَر, لْگِيت),因为ك读作“k”。
    • 分段: 对于超过约700个字符的脚本,在句尾处将其分为编号段落。
  • 字数和时长使用上述阿拉伯语速率计算,标签和发音符号不计入。

然后回复:

  • 可复制的脚本块,附带字数和预估时长。
  • 一段视觉计划(将动画化的镜头)。
  • 录音提示:一个稳定、温暖的旁白声音;ElevenLabs效果不错(深沉旁白音色,速度约1.05-1.1,稳定性约45-55%)。Mp3或Wav格式均可。在句尾留出自然停顿。导出时不含音乐。
  • 阿拉伯语录音提示:使用Eleven v3,因为旧模型会直接读出 [tags]。初始将稳定性设为Natural,速度约0.95,先试第一句再生成全部。使用其他生成器时,先删除标签。用户自己的声音也可以,无需标签或发音符号。
  • 请求:“配音准备就绪后请上传,我将制作完整视频。” 保留最终脚本文本。它将用于阶段4的计时,因此无需语音识别。如果用户录制了更改过的版本,请索要最终文本。

阶段4:制作视频(配音上传后)

此后不间断地完成所有操作。仅在时间无法解析时提问。

4.0 获取工具包

代码工具包包含引擎、工具、工作示例、vendored three.js r160、来自 github.com/mromidev/claude-animated-shorts 的 toon.ts Pen 库(均采用MIT许可),以及 Lalezar 阿拉伯语字体(SIL OFL)。按以下顺序查找,并将其视为只读:

  1. 本 SKILL.md 旁边的 kit/ 文件夹,通过 find / -name SKILL.md -path "*cartoon-audio-short*" 2>/dev/null 查找。
  2. 已解压的 cartoon-short-kit 文件夹。
  3. 本次聊天发送文件中的 cartoon-short-kit.zip:find / -name "cartoon-short-kit*.zip" 2>/dev/null,然后将其解压到 ~/cartoon-short-kit-src/。工具包是该文件夹内包含 engine/ 的目录。

然后运行 bash <kit>/tools/setup.sh ~/shorts/<slug>。它将引擎和工具复制到项目目录,安装 vendored three.js,使用 Node 22 module.stripTypeScriptTypes 从 toon.ts 中移除类型,并链接 Playwright。无需网络。如果 vendored 文件缺失,则回退至 npm 或 git clone。

  • 要求:Node 22.6+,Python 3 配合 numpy 和 Pillow,ffmpeg,以及带 Chromium 的 Playwright(如缺失则运行 npm i -g playwright && npx playwright install chromium)。
  • 如果软件包注册表被屏蔽,通常可以通过 GitHub 的 git 进行。切勿禁用TLS或绕过代理。
  • Chromium:使用预装的 Playwright 浏览器,参数为 --use-angle=swiftshader --enable-unsafe-swiftshader --ignore-gpu-blocklist。这将提供CPU WebGL,渲染速度约为每帧3-10秒。

4.1 时间线

运行 python3 timing.py voice.mp3 script.txt --out work。如果没有脚本,则添加 --lang ar 以指定阿拉伯语。脚本可以是精确的语音块:它会移除 [tags] 和发音符号,并同时在阿拉伯语标点处拆分短语。

  • 如果安装了 whisper 或 faster-whisper,则使用词时间戳。对于阿拉伯语,它使用多语言模型,并保留脚本自身的词语,因此误听的方言词不会改变文本。
  • 否则,它将脚本短语(在标点处拆分)与静音检测到的语音片段对齐,使用动态规划算法,基于音节和时长进行匹配,并惩罚片段内部的句尾和短语内部的长间隔。
  • 如果没有ASR且没有脚本,则请求脚本。Claude无法直接听辨音频。
  • 检查 work/phrases.json:停顿应落在句尾。总帧数 = round(duration × 30)。

4.2 镜头计划(代码前的 work/PLAN.md)

每个镜头一行:帧数、台词、场景、灯光、摄像机运动、角色/姿势/表情、效果和音效提示。

  • 第0帧已是引子画面。
  • 通常每个短语一个镜头。将极短的短语合并到下一个镜头中。
  • 逐句直观地阐释。道具承载笑点。
  • 变化镜头景别:引子中景 → 全景展示 → 双人镜头 → 关键物品的特写插入 → 反应特写 → 环境移动用于收尾。
  • 用灯光表达节拍:白天用于正常,金色用于衰退或戏剧性,夜晚蓝色用于解释。时间跳跃使用6帧白色闪白。
  • 反转台词处使用突击音效(音乐停止,低音撞击,推镜头并旋转)。最后镜头的物理收尾在最后一个词处落地。

4.3 世界(web/main.js)

保留引擎部分:toon材质、墨线轮廓、add/tbox、天空、灯光、卡片、渲染目标/后期、applyLight、drawActors、swapForNd、renderFrame。替换 // ---------- world ---------- 和 // ---------- cards ---------- 之间的示例世界,以及 worldState() 中的故事部分。

  • 使用基本几何体构建世界,配合画布绘制的纹理(paint.js:木板、横梁、朽木、石头、苔藓/常春藤、草、泥土、石膏、屋顶瓦、大理石、旗帜、雕刻文字)。使用相同的扁平暗缝风格编写新的绘制工具。
  • 使用 tbox 保持恒定纹理密度,2阶toon渐变,以及雾效等于地平线颜色。
  • 背景:小山丘(半埋球体),远山(圆锥+雪帽),柏树/松树,远景房屋,绘制的云朵公告板。
  • 布景元素(倒塌、坠落、门)是由0..1进度驱动的枢轴组,使用 worldAt(f) 配合缓动和错开的部分。
  • 弯曲的场景内文字使用平面UV。检查是否镜像。
  • 任何物体上的阿拉伯语文字: 对于标志和标签,使用 P.signCanvas(text, opts) 配合 P.tex();在自定义画布上使用 P.drawText();或使用 P.carvedText() 进行雕刻。它们会加载捆绑字体,设置从右到左,并绘制整个字符串。切勿逐个绘制阿拉伯字母。

相关技能