分镜板 是做什么的?
分镜板是一支视频的拍摄方案和剪辑方案。当用户能够从上到下读懂它、按场景拍摄、然后把每个镜头交给剪辑(或交给 Claude)并且对画面上有什么、文字说什么、声音是什么了如指掌时,就完成了。
保持精简。 只需要镜头和场景,没有别的。不需要弧线图、不需要逐个镜头的转场、不需要品牌套件、不需要检查清单。如果用户想要更多,他们会问。
首次运行:引导设置
当 ~/.claude/storyboard-profile/profile.md 不存在时、刚安装完技能后、或者用户要求设置或重新学习他们的风格时,运行设置。一步一步地引导他们:用一句话说明这一步的目的,执行它,并在需要询问的地方停下来等待。保持每条消息都简短;大多数做这事的人是创作者,不是开发者。
-
欢迎。 一条简短的消息:技能的作用(输入脚本,每行输出一帧画面,然后 Claude 据此构建图形)以及设置大约需要五分钟。然后说第一件事是需要看看他们的视频。
-
检查工具。 检查 Python 3、Google Chrome(或 Chromium / Edge)和
ffmpeg。yt-dlp是用于链接的额外工具。对于任何缺失的工具,给出其系统的安装命令(例如 Mac 上brew install ffmpeg,Windows 上winget install ffmpeg)并主动提出运行它。在 Chrome 和 ffmpeg 正常工作之前不要继续。 -
询问他们的情况。 一条消息,每行回答一个问题:他们的昵称和平台、内容是关于什么的、视频通常有多长、以及他们如何结尾(评论关键词、关注、个人简介链接)。
-
索要他们的视频。 这是重要的一步,所以要解释原因:他们的分镜板应该看起来像他们自己的视频,而不是模板。请他们提供 3 到 5 个最能展示他们风格的已发布视频,如果他们有屏幕录制或图形相关内容,最好包含一个。他们可以将文件拖入聊天(这会粘贴路径)或粘贴链接。如果安装了
yt-dlp,就用它下载链接;如果链接无法下载,就索要文件。将所有内容放入~/.claude/storyboard-profile/source/。 -
研究视频。 对于每个视频:
- 帧:
ffmpeg -i v1.mp4 -vf "fps=1,scale=360:-2" -q:v 4 source/v1_%03d.jpg,然后查看它们。 - 剪辑点:
ffmpeg -i v1.mp4 -vf "select='gt(scene,0.1)',showinfo" -f null - 2>&1 | grep -o "pts_time:[0-9.]*"可以给出剪辑时间,这样你就能了解平均镜头长度。说话头部中的跳切几乎不改变画面,会被漏掉,所以要用 1 fps 的帧数来对比检查。 - 话语: 如果安装了
whisper(或其他转录工具),则转录它。如果没有,从帧上读取烧录的字幕,或者请他们粘贴脚本。
记录你实际看到的内容,而不是猜测:镜头类型的混合(面部 vs 屏幕 vs B-roll 的比例)、平均镜头长度、取景(中景还是特写、他们坐的位置、背景)、前两秒如何吸引人、屏幕上的文字(字体粗细、大小写、颜色、高亮样式、位置)、字幕样式、主要颜色、重复出现的图形或叠加层、声音习惯,以及行动号召如何落地的。
- 帧:
-
挑选他们的面部静止帧。 选择一个清晰且没有烧录字幕的他们对镜头说话的画面,裁剪成 9:16 (
ffmpeg -ss <t> -i v1.mp4 -frames:v 1 -vf "crop=ih*9/16:ih,scale=540:960" face.jpg) 并保存为~/.claude/storyboard-profile/face.jpg。从现在起,每个面部镜头都使用它。 -
写入配置文件。 将
~/.claude/storyboard-profile/profile.md保存为包含 创作者(步骤 3)、镜头(类型混合、平均长度、取景)、钩子、屏幕文字、字幕、颜色、声音、行动号召 和 重复图形 的章节。然后写入~/.claude/storyboard-profile/theme.css,用他们的外观覆盖套件变量::root { --ink: #111; --accent: #ff5a1f; --on-accent: #fff; --bg: #f4f1ea; --grid: rgba(0,0,0,.05); --font: "Montserrat", sans-serif; }使用他们已经安装的字体;如果他们的字体没有,选择最接近的已安装字体。
-
向他们展示并确认。 构建一个样本帧(他们的标题样式叠加在他们的面部静止帧上),渲染它,展示它,并附上配置的三行总结,然后询问哪里不对。不断修改直到他们说看起来像他们的内容。
-
交班。 告诉他们设置完成以及下一步该做什么:“粘贴一个脚本并说‘storyboard this’。” 只要他们的风格改变,他们可以随时重新运行设置。
如果它们宁愿跳过设置,则使用套件的默认外观制作分镜板,并在最后再次提供设置。
格式
每个镜头包含:
| 字段 | 含义 |
|---|---|
type | face(对着镜头说话)、split(屏幕在上,面部在下方圆角框内)、screen(屏幕录制)、graphic(剪辑中构建)、b-roll(真实世界素材) |
vo | 该镜头中说的确切脚本词句 |
on_screen_text | 烧录到帧中的文字,通常为空 |
edit_note | 一两行:屏幕上有什么、什么在移动、取景如何 |
sfx | 音效,通常为空 |
thesis | 恰好一个镜头为 true |
status | real(帧就是素材)、stand-in(展示意图)、to-capture(尚未有任何内容) |
时间基于 VO 以 3.4 词/秒 计算。永远不要手动设置。
场景按拍摄地点对镜头进行分组:label、detail(要准备什么)和 shots(镜头编号)。
步骤
-
读取配置文件并获取脚本。 读取
~/.claude/storyboard-profile/profile.md并遵循它:他们的镜头长度、镜头类型混合、文字风格、行动号召。如果与下面的默认值冲突,配置文件优先。还没有配置文件?先提供设置。如果对话或文件中没有脚本,索要脚本,并记下目标长度(如果他们没有说明,则使用配置文件的通常长度)。不要编辑脚本。如果某行读起来不对,指出来并让用户修复。 -
逐字将脚本拆分为镜头。 合并起来,
vo字段必须严格等于脚本。不要改写、删减或添加一行。- 在画面变化的地方切分, 而不是在句子结尾。逗号就是很好的切分点。
- 目标是每个镜头 2 到 6 秒(7 到 20 个词)。超过大约 8 秒,就拆分它,除非一个连续的画面确实能传达这句台词。
- 镜头 1 包含说话者的面部(
face或split镜头)。第一秒出现面部能吸引住观众。 - 标记恰好一个
thesis镜头: 说明视频核心论点的台词。 - 最后一个镜头:说话者的面部说出行动号召。 如果有评论关键词,它是说出来的,存在于字幕中,而不是作为一个大的屏幕药丸。
- 变化类型。 不要连续三个
face镜头。用face表达主张、旁白和行动号召;用screen展示任何东西。
-
精打细算地填写字段。
on_screen_text:镜头 1 的标题、列表编号(01 SCRIPT),最多一句点睛之语。其他地方留空;字幕承载其余内容。edit_note:屏幕上有什么、什么在移动、以及取景(中景或特写)。隐私提示也放在这里:模糊电子邮件、裁剪显示用户名的文件路径。sfx:整个视频中两到三个,只在某些东西落定时使用(开头来个提示音,某样东西上线时来个重击音)。
-
按拍摄地点将镜头分组为场景, 而不是按镜头顺序。
- 面部: 每个面部镜头以及每个 split 镜头中的面部部分作为一个场景。
- 屏幕: 每个应用或工具会话作为一个场景,全程使用相同的真实项目。
- 离开桌面: 仅当某个 B-roll 镜头需要时。
detail: 要准备什么(要打开哪个项目、要运行什么、屏幕上要先清除什么)。
-
在用户工作目录的
storyboard/<video-slug>/文件夹中写入storyboard.json(如果有更好的位置,询问一下):{ "title": "AI edits my videos", "target_seconds": 50, "shots": [ {"type": "face", "vo": "My last couple of videos were all edited by Claude.", "on_screen_text": "CLAUDE EDITS MY VIDEOS", "edit_note": "Mid shot, headline holds 4s.", "sfx": "", "thesis": false, "status": "to-capture"} ], "sittings": [ {"label": "Face", "detail": "Same shirt and light for every face line.", "shots": [1]} ] } -
为每个镜头构建一帧(下一节)作为
frames/f01.html、frames/f02.html等。编号对应镜头的位置。 -
渲染:
python3 <此技能的文件夹>/kit/render.py storyboard/<video-slug>它会在无头 Chrome 中渲染出 540x960 的
frames/out/fNN.png、frames/out/contact-sheet.jpg和board.html:每帧旁边紧贴其 VO、文字、编辑注释、音效和时间,以及场景信息。它还会输出运行时长和面部对屏幕的秒数。 -
检查联系表, 然后修复并重新渲染:文字是否叠在脸上、是否有重叠、文字是否在安全区内、是否有任何隐私内容。
-
简短报告: 镜头数、运行时长对比目标长度、面部对屏幕的秒数、以及还有哪些需要拍摄。为用户打开
board.html。
帧
尽可能使用最真实的来源,按此顺序:
-
真实素材。 镜头中实际网站或应用的截图(无头 Chrome 或 Playwright,桌面宽 1440,移动端宽 390),或者从用户自己的素材中截取的静止帧(
ffmpeg -ss <time> -i clip.mp4 -frames:v 1 still.jpg)。将图片放入frames/文件夹并按文件名引用。 -
构建的帧。 使用 kit/frame-kit.css 中的类,将帧编写为 HTML body 片段。片段中的
{{face}}会变成frames/face.jpg(如果存在的话),否则变成设置中的面部静止帧,再否则变成中性剪影。设置的theme.css会自动将所有帧重新样式化为他们的颜色和字体。类 用途 .f帧包装器,始终是外层元素 .hl顶部的标题, <em>标记一个关键词.lbl搭配.n+.t编号列表标签( 01 SCRIPT).face全帧面部(一个 <img src="{{face}}">).faceboxsplit镜头中的面部框.term一个 Claude Code 终端( .p提示符,.tool工具调用,.ok,.dim).chat+.bub+.vid一个代理聊天消息,可选带视频 .shot一个截图卡片( <div class="shot"><img src="..."></div>).tbl一个数据表( .h表头,.r行,.r.new新行).big一个大号点睛之句 .room一个带说明的 B-roll 占位符 使用内联
style="top:..px"设置垂直位置。示例片段:<div class="f"> <div class="lbl"><span class="n">01</span><span class="t">SCRIPT</span></div> <div class="term" style="top:200px"> <div class="bar"><i></i><i></i><i></i></div> <div class="p">write me a 45 second script about ...</div> <div class="ok"> ✓ script.md</div> </div> <div class="facebox"><img src="{{face}}"></div> </div> -
用真实数据模拟 当屏幕位于你无法通过的登录后面时。不要代表用户登录。用真实数字构建屏幕并标记为占位帧。
帧规则:
- 安全区域: 将文字保持在底部 20% 和右侧 12%(点赞和评论轨道)之外,并保持顶部 8% 空白。套件的位置已经遵守这些规则。
- 他们的标题样式: 遵循配置文件中关于屏幕文字的说明(大小写、粗细、他们如何高亮一个词)。默认是粗体大写,一个关键词用
<em>。在全帧面部上,套件会将文字变为白色并带有柔和阴影。 - 隐私: 任何帧中不得出现包含用户名的文件路径、电子邮件、API 密钥或
.env内容。在表格中使用假 ID。
用于构建视频
一旦分镜板被批准,它就成了提示词。逐一构建图形:“从分镜板构建镜头 4,作为一个 9:16 运动图形:匹配帧、屏幕文字和编辑注释。”第一个版本永远不对;把它放入剪辑中,与帧进行比较,反复迭代直到匹配。