Communitygithub.com

ohmdob/podcast-motion-animatic

将播客或脱口秀节目转化为动画分镜风格的视频——手绘草图面板在屏幕上以步进式手工动画移动,配合语音节奏,配合画外主持人与主题蓝图背景。支持16:9和9:16格式,可从已有录像、纯音频或脚本+手绘主持人开始制作。

podcast-motion-animatic 是什么?

Podcast Motion: Animatic 是一款专为播客视频化设计的 AI 技能,它能把脱口秀或访谈节目变成一种“动态分镜”的视觉风格。核心思路是将每一段谈话要点制作成一个手绘草图面板,面板以每秒6步的卡顿式手工动画移动(而非平滑过渡),配合原始录音,营造出故事板被赋予生命的朴素手作感。此技能适用于16:9和9:16两种画幅,支持从已有录像、纯音频文件甚至仅从脚本(配合手绘主持人)开始构建。其最大优势在于:所有照片素材都会通过本地免费流程自动转换成统一风格的铅笔素描,极大降低了生成成本并提供一致的视觉效果。它还提供多种内置动画(如掉落、弧线、翻页书等)以及蓝图主题(反转素描并叠加在网格背景上)。此技能与 podcast-playbook 紧密配合,后者负责处理音频、转录和剪辑。触发关键词包括“animatic”、“animatic podcast”、“audio-only podcast video”以及泰语关键词。

兼容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/ohmdob/podcast-motion-skills/tree/HEAD/.claude/skills/podcast-motion-animatic

在你喜欢的 AI 中提问

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

文档

播客动态:动态分镜(Animatic)

状态:已制作并获制片人批准一部2分钟的脚本电影(两位手绘主持人、卡片、蓝图、16:9)。 真实录像和9:16格式仅在测试帧上验证过,因此在长时间渲染前请先展示这些测试帧并获取决策,然后将结果记录在节目的 STYLES.md 中。请先阅读 podcast-playbook:它包含了声音、剪辑、门控和主控流程。

  • 理念: 让故事板活起来。谈话的每个要点对应一个面板,在真实语音下以步进式动画保持并移动。
  • 最佳适用: 适合可以画出来的话题讨论,以及纯音频节目。
  • 额外步骤: 无,也不需要遮罩。
  • 成本: 图片素材,除非节目已有。它会复用找到的任何静态图片。

面部保持自然

面板只绘制想法和物体,绝不要画正在说话的人。 插画风格的嘉宾是这种风格绝对不能做的事情:嘉宾的可信度是节目的核心,在实际节目中,风格化的面部已被立即否决。所以 永远不要给出一张人物图片,也不要让生成器画一个。在两面板之间,观众看到的是真实的讲者,以自然色彩呈现。

已经是角色的主持人属于唯一例外,前提是制片人要求:上述原因涉及真实人物的可信度。此时插画角色会代替讲者的位置,面板仍然只显示物体和文字。参见 podcast-playbook 中的 references/scripted-show.md。

构建

python3 scripts/build.py episodes/EPxx/full --ratio both --frames
python3 scripts/build.py episodes/EPxx/clips/Cnn_name --ratio both --frames

scripts/ 是本技能的文件夹。影片的文件夹需要先执行 full_edit.py --render,且 build/ 目录下需包含 faces.jsonl 和 pass1.json(参见 podcast-playbook 中的 references/full-episode.md)。--frames 会生成真实帧的接触印样供评判。它会输出 variant_animatic/ 和 variant_animatic_9x16/ 文件夹。渲染和主控流程参照 podcast-playbook。

面板

cards.json 中的每一张卡片都是一个面板。

  • 带图片的卡片(opts.panel,其次 opts.still 或 opts.obj):图片以铅笔素描形式呈现,下方附有卡片标题,每一行文字落地时替换上一行。
  • 无图片的卡片: 其文字以手写体形式呈现在框架中。

它首先查找 assets_src/panels/<名称>,然后是 Studio Cut 的静态图片,最后是 Pop Studio 的对象,格式为 .png 或 .jpg。如果找不到指定的图片,则将其作为文字呈现,构建过程会报告这一情况。

素描处理是本地且免费的,这正是成本低廉的原因: 任何照片或来自其他工具的图片,最终都会呈现为同一手绘风格,因此混合来源的素材看起来仍像统一的故事板。如果您的图片已经符合需求,请设置 "sketch": false。

获取图片 遵循 references/storyboard-and-assets.md:先报价,如果没有 Ideogram,询问制片人使用哪个替代方案。一张图片可用于多张卡片,因此20分钟的剧集大约只需20个面板。坚持一个清晰的物体,因为复杂的照片在素描后会变成噪点:

Studio photograph of one single plain white cup, centred, on a plain pale background, soft even light, strong clear outline. No text, no letters, no logos, no people, no hands.

保存为 assets_src/panels/cup.png,并在卡片上写 {"panel": "cup"}。

使其看起来像手绘的关键: 动画以每秒6步的速度移动(steps()),剪接是硬切。平滑运动会使其变成幻灯片,所以请保持现状。

卡片、动作与主题

以下是一位制片人逐次提出的要求,均已被采纳。每项功能默认关闭,只有在节目需要时才开启,代码位于 scripts/animatic_cards.py,其顶部列出了所有选项。

"looks": {"animatic": {"layout": "card", "blueprint": true, "paper": "#0A1A33", "ink": "#E6F4FF", "pencil": "#9CC4E4", "accent": "#FFB547"}}
  • "layout": "card" 使主持人在屏幕上保持可见。 全幅面板会隐藏主持人,而该布局如同 Pop Studio 一样,在主持人一侧显示图片卡片和解释性文字。卡片位于讲话者对面的一侧:先显示标题,文字逐行落地并停留,然后图片填充剩余空间。目前仅支持16:9。主持人背后的文字(Pop Studio 的另一半)需要蒙版,因此此处未实现。
  • opts.motion 使图片随故事移动。 内置动作包括:still(静态)、drop(掉落)、arc(弧线)、fly(飞行)、drift(漂移)、sway(摇摆)、hop(跳跃)、swarm(群集)、flipbook(翻页书)。仅对每个面板进行慢推镜头已无法满足制片人需求;一个被抛出的球不仅能展示故事,还能讲述故事。您可以在 moves.py 中编写自己的动作:examples/hail-mary/moves.py 演示了用三个绘图讲述一个情节,以及一个在电影早期出现的球在结尾落地。
  • "blueprint": true 为主题化。 从故事中提取主题并询问:例如,深蓝色网格适合太空题材电影。它会对每个素描进行反色处理,并以“屏幕”模式叠加,使移动的图片不显示边缘。
  • 绘制生成器无法清晰给出的内容。 一个包含18幅绘图的翻页书、一个行走的外星人和一艘完整的飞船成本为零,而且比照片素描的效果更好。examples/hail-mary/draw_art.py 展示了如何操作。对他人角色的绘画仍属于他人,因此在发布前需要提出。
  • paper.json 中的 "wide" 提供双人镜头。快速简短对话的主持人无法从规划器中获得双人镜头,而观众应在早期和结尾看到两人。

已犯过的错误

  • 卡片必须落在自己的取景位置上。 规划器对每个镜头至少保留一秒,因此卡片可能遮挡半张脸达0.9秒。在卡片布局中,镜头现在精确地在卡片边缘和发言人切换时剪切。
  • 画面边缘出现另一主持人的一小部分看起来像失误。 卡片背后会有一条实心色带延伸到画面边缘。
  • 图片在其窗口内太小: 先让文字占据其应有空间,然后使用 zoom。在微小苹果上的密集文字行看起来未完成。
  • 对于向后飞的图片进行翻转。 飞船机头指向了它来的方向。
  • 检查悬挂物是否与悬挂点连接。 比木偶短的绳子在屏幕上显示了10秒后,才被新审片人指出。
  • 纯文本卡片是移动画面中最弱的环节。 仅用于数字,其余内容请画出来。

无摄像机

对于仅有音频的节目,从录音创建一个纯色视频,整个流程照常运行:

ffmpeg -f lavfi -i "color=c=0xF6F7F5:s=1920x1080:r=25" -i EPxx.wav -shortest -c:v libx264 -crf 18 -pix_fmt yuv420p -c:a aac 1080p/EPxx.mp4

然后在 paper.json 中设置 "audio_only": true。面板之间,画面显示章节名称。faces.swift 找不到面部也没关系。讲者仅来自转录文本,因此请修正 pass1.json 中的 who。保持每几秒一个面板: 没有其他移动时,长时间空白就是冻结画面,会在12秒时被主控检查标记为失败。

屏幕上的内容

  • 16:9: 主持人在面板之间充满画面;面板是一个松散的铅笔框架,置于白纸上,下方有一行标题。
  • 9:16: 框架位于 y 170 到 1070 之间,标题在框架下方,位于应用的安全区域内,节目标志在更下方。面板之间,章节名称替代标题位置。
  • 数字和裁决 以红色显示。没有泛滥:在铅笔框架中,一个红色单词已经是屏幕上最突出的元素。
  • 纸张为冷调米白色,特意设计:暖调米色纸张配衬线字体是每个节目都应避免的样式。
"looks": {"animatic": {"paper": "#F6F7F5", "ink": "#1C2126", "pencil": "#59626A", "accent": "#D3261F", "sketch": true}}

手写字体为 Itim,支持泰文和拉丁字母。

检查事项

  • 在手机屏幕尺寸下阅读每个标题和纯文本面板。
  • 素描是否能清晰表达其意图? 逐一检查。如果图片无法清晰表达,尤其是在健康或法律相关点上,则不如使用文字:改为纯文本。
  • 面板会完全遮挡主持人, 因此在主持人面部表情起关键作用的时刻不要放置面板。
  • 同一图片重复使用 在几张卡片内可以接受,但超过一定数量后会使人生厌。
  • 有意为之的异常: timeline_track_too_dense,因为一个章节包含多个时间准确的面板。
  • 逐帧检查每个卡片的到达过程。 卡片到达的第一秒是取景和入场缺陷的隐藏处,每几秒采样一次会错过这些缺陷。

相关技能