关于 style-edit
面向 Claude 的视频编辑技能,可将已批准的剪辑制作成包含字幕、定时画面和动画的成片。它结合创作者风格与用户素材,并在交付前检查静帧和渲染结果。
主要功能
- 01根据剪辑生成定时字幕
- 02围绕口述内容规划画面
- 03应用创作者风格和提供的素材
- 04检查静帧并验证渲染
- 05在本地或已配置目标渲染
适用场景
- 01为已批准的视频剪辑添加风格
- 02让字幕和画面与口述同步
- 03依据创作者档案制作编辑
- 04渲染并检查成片
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ nextwork-projects/ ai-video-editor-cooked --skill style-edit安装后在 Claude Code 中输入/style-edit确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/ai-tells.mdcontracts.mdmotion-design.mdmotion.mdplan.mdrender.mdreview.mdshapes.mdvisuals.mdscripts/ai_tells.pycapture.mjschapters.pycheck.pyedit.pyexport_nle.pyface.pymatte.pymodal_render.pyplan.pypreview.pyquality.pyroute.pysfx.pysheet.pysource.pystyle_check.py详细介绍
风格编辑
路径:${CLAUDE_SKILL_DIR} 表示包含此 SKILL.md 的文件夹,${CLAUDE_PLUGIN_ROOT} 表示它上两级的插件文件夹。
先阅读 ${CLAUDE_PLUGIN_ROOT}/PRINCIPLES.md:每条视频都要遵循的规则(位置、提问、真实感、动态、故事、隐私、成本)。
所有问题都要放在问题框中:使用 AskUserQuestion 工具(提供 2-4 个选项,并将推荐选项放在首位)。只有在没有该工具的 Agent 中,才用文本提出编号问题。回答中出现 Attached images: <paths> 时:先逐一读取。
获批的剪辑,以及创作者的风格(skill= 任务会运行该技能:从步骤 3 开始)。
输出最终视频:字幕、缩放、真实素材和动态场景都要与台词时间同步,并呈现创作者的风格和用户的品牌形象。用户会在审核页面确认静帧(步骤 5),并选择渲染版本(步骤 6)。
路径相对于素材库(PRINCIPLES.md)。在 Mac 和 Linux 上用 python3 运行脚本,在 Windows 上用 py。S="${CLAUDE_SKILL_DIR}/scripts",
VPY="${CLAUDE_PLUGIN_ROOT}/lib/ai_editor/run.py";python3 "$VPY" 是虚拟环境中的 Python。
edits/<name>/cut.mp4 + cut.transcript.json + words.json (cut)
edits/<name>/style.json (start: the profile's creators blended)
or creator-teardowns/<handle>/style.json (one creator, from creator-teardown)
~/.ai-video-editor/profile.json (start: brand kit, names, assets, avoid, sound)
captions.json -> beats.json -> visuals.json -> images/ + images.json -> plan.json -> stills/sheet.png -> render.mp4
仅在步骤明确要求时阅读以下参考资料:references/visuals.md(各格式详解)、
references/plan.md(plan.py、抠像、声音、音乐、检查)、references/motion.md(模板、
转场、标记)、references/render.md(目标、实时预览、导出)、references/review.md
(审核页面)、references/ai-tells.md(禁止使用的 AI 风格)。references/contracts.md 是给工作人员看的:绝不要阅读。
0. 读取风格偏好和个人资料
python3 "${CLAUDE_PLUGIN_ROOT}/skills/taste/scripts/taste.py" show --edit edits/<name>
python3 "${CLAUDE_PLUGIN_ROOT}/lib/ai_editor/profile.py" show
遵循每条风格偏好规则;脚本会自行读取设置。用户对结果作出反馈(“太慢了”“字幕太小”)时,在重新编辑前,先用风格技能保存该反馈。
1. 检查输入
- 没有 cut.mp4? 先运行 cut 技能,绝不要直接处理原始素材。有
prep-decisions.json?visual-prepAgent 已完成步骤 1-3 和工作表:参阅references/plan.md中的“在审核剪辑时准备”。 - 没有 style.json? 运行
python3 "${CLAUDE_PLUGIN_ROOT}/lib/ai_editor/profile.py" style edits/<name>。 如果个人资料中没有创作者,或没有个人资料,程序会写入默认风格:每隔至少 5 秒进行一次平滑缩放, 字幕每行 3 个词(参阅references/plan.md中的“没有创作者”)。如果程序因no creator style.json found而停止,针对个人资料中的创作者运行 creator-teardown 快速模式,然后 再运行一次。style.json 缺失时,plan.py 也会使用默认风格进行规划,并会说明这一点。 - **用户的图片:**个人资料
assets_dir中适合对应台词的所有素材,加上用户提供的任何素材, 都放入edits/<name>/images/和images.json:[{"src": "images/dashboard.png", "word": "dashboard", "nth": 1}](可选项:layout、hold_s、entrance;支持透明 PNG 和 Lottie.json)。 - 用户在页面上添加的内容(
assets.json,review.pywait的assets:行):首先处理,且要在任何搜索之前, 按agents/visual-prep.md步骤 2 的说明,将每项内容放在对应的say台词词句上。尚未加入 images.json 或 visuals.json 的内容都是新素材。
2. 字幕文本
python3 "${CLAUDE_PLUGIN_ROOT}/skills/cut/scripts/retakes.py" captions edits/<name>
写入 captions.json 和 captions.txt:即最终剪辑中听到的词(验证步骤的
cut.transcript.json),并与时间同步;每个听写结果不一致的词(“Jev”听成“Jeff”)都要按获批剪辑中的文本拼写,
姓名按个人资料中的 names 拼写,并应用所有先前的 retakes.py fix。程序会打印每个已更改的词。绝不要读取这两个 JSON 文件:校对
captions.txt,字幕就是根据该文件制作的。如果仍有词语错误,只需运行一条命令,即可原位修复 captions.json,时间戳不会改变,而且修正内容会保存在 fixes.json 中,供之后每次生成字幕时使用:
python3 "${CLAUDE_PLUGIN_ROOT}/skills/cut/scripts/retakes.py" fix edits/<name> cloud=Claude jiv=Jev
从此处开始使用 captions.json。
3. 视觉素材
先阅读 references/shapes.md 和 references/motion-design.md:了解每种选项的形状和 plan.py 的规则,然后了解默认外观和动态效果(优先使用制作的动画,而非采集画面;画面中的卡片要大;每页只放一个采集画面)。
- 提出方案:
python3 "$S/route.py" beats edits/<name>会将 captions.json 拆分成句子,并将命名事物(profile、logo-pack)标记到 beats.json 中。你为每个句子自行选择一种路线(none、capture:shot|browser|sticker、post、logo、logo_cluster、chat、terminal、toasts、side_by_side、video_card)。 - 优先使用真实内容: 编写
visuals.json(参见references/shapes.md):命名的产品或文档设为capture(通过文本查找marks);引用的帖子设为post;应用设为app;视频设为youtube;代码仓库设为github;顺带提及的品牌设为logo;专家的话语设为片段(参见references/visuals.md“Sourced proof”)。 - 填充叠加元素: 对叠加选项,只编写属性(参见
references/shapes.md)。如果有template-fillerAgent(haiku)可用,就将其交由该 Agent 处理,并提供references/shapes.md的完整路径;否则自行编写。只使用讲者说过的词语和数字。不使用文字卡片。 - 获取素材:
node "$S/capture.mjs" edits/<name>会将采集画面、Logo、帖子获取到images/,并测量标记位置。 - 动态效果: 动态模板拍点改为定制片段(motion skill);片段制作失败时,保留其卡片。
节奏:以模仿的创作者的节奏为准。route.py 会显示她每分钟的卡片数量、类型及画面中的位置,并将相应数量的句子标记为 want(优先标记命名事物)。为每个标记的句子添加一张她所用类型的卡片,并在她指定的位置放置 box,避开头部:优先使用用户自己的照片,其次使用与台词内容相关的真实事物采集画面(页面、个人资料、帖子),再其次使用用户自己的片段作为 video_card。绝不使用虚构图片或素材图片:没有真实素材的 want 就留空。绝不询问要展示什么:自行选取真实采集画面(包括用户自己的产品)。没有创作者时,只在台词提及真实事物的地方添加卡片。绝不同时显示两张卡片;两张卡片之间不得有超过 card_gap_s 的间隔(plan.py 会在该处添加缩放效果,参见 references/plan.md“Pacing”)。竖屏采集画面必须添加 find,确保能在手机上看清。卡片修改:参见 shapes.md。
4. 规划
先找到讲者的头部,确保没有框遮住脸,然后使用步骤 1 的 style.json 进行规划:
python3 "$VPY" "$S/face.py" edits/<name>
python3 "$S/plan.py" edits/<name>/style.json edits/<name>/captions.json [--aspect 9:16|16:9] [--layout overlay|split|letterbox]
生成 edits/<name>/plan.json。阅读所有警告。文件末尾是 style check(style_check.py):每一行 style: 都指出规划与创作者风格的差异。逐项修正(style.json、visuals.json、images.json),然后重新规划,再制作静帧;用户所做的修改已经是目标风格。
- 音乐:除非用户另行指定,否则遵循该风格(参见
references/plan.md“Music”;plan.py 会自行铺设创作者的背景音乐),然后再次运行 plan.py。音效提示无需处理:plan.py 会自动添加。 - 讲者身后: 如果 profile 中设有
"behind": true,请在最后一次运行 plan.py 后运行matte.py,之后每次再次运行 plan.py 后也都要运行(它只会处理新画面);先说明--estimate的运行情况(参见references/plan.md)。 - 检查规划:
python3 "$S/check.py" plan edits/<name> [--plan plan.json] [--style edits/<name>/style.json]
修复每一项 FAIL,然后重新规划。FAIL 项的说明见 references/plan.md。
5. 静帧:由你检查,然后直接渲染
用户已批准剪辑:批准就意味着制作剪辑。绝不要把静帧放到审核页面,也绝不要等待用户再次批准(Max,2026-10-15:用户不喜欢增加静帧审核步骤)。
python3 "$S/edit.py" stills edits/<name>
首次运行时会安装渲染器(耗时几分钟,只需安装一次;先告知用户)。每个拍点生成一张静帧,并生成 stills/sheet.png(标注拍点、时间和卡片类型)。自行检查整张图;只有需要放大时才打开单张静帧。渲染前修复以下问题:框压住脸、缩放切掉头部、采集画面中选错区域、文字在手机上太小、AI 默认风格。可以使用 stills-critic 检查。然后继续步骤 6 并进行渲染;用户的意见会针对渲染后的剪辑提出。只有用户要求时才手动调整动态卡片:参见 references/render.md“The live preview”。
6. 选择渲染位置
python3 "$S/edit.py" estimate edits/<name>
打印 Laptop:、Modal: 和两行 Other:(GitHub Actions、Lambda),显示渲染此视频所需的时间和费用,然后打印 Recommended::Modal 已连接、视频时长超过一分钟且 Modal 更快时推荐 Modal;否则推荐笔记本电脑。在配置文件中设置 render,或者设置 Recommended: Laptop:直接在笔记本电脑上渲染,不询问,并用一行说明所需时间(“正在笔记本电脑上渲染,约 14 秒。说‘render on Modal’可更改”)。未设置且 Recommended: Modal:只询问一次,按此顺序给出三个选项,并显示打印出的数字;Modal 标为 (Recommended),然后运行 profile.py set render='"laptop|modal|github|lambda"'。
- 笔记本电脑:显示所需时间,免费。
- Modal:显示所需时间和费用(每月有 $30 免费额度)。尚未连接:标为 连接 Modal;选择该项后,在后台运行
setup.py modal-connect(setup skill 的 Modal 步骤),然后在 Modal 上渲染。 - 其他:GitHub Actions 或 AWS Lambda:描述中列出的两行
Other:。选择此项后,再询问一次,并列出这两个选项。GitHub Actions:免费,需要登录gh,素材会放入其账户中的私有仓库;创建仓库前先询问。Lambda:使用用户自己的 AWS 账户。配置文件中未设置cloud_cleanup:只询问一次“渲染后要从 <GitHub|AWS> 删除上传的素材吗?”(是(Recommended)/否,保留在那里),然后运行profile.py set cloud_cleanup=true|false。
选择了 Modal 但尚未连接:先运行 setup.py modal-connect(见上文)。选择了 Lambda,且 aws sts get-caller-identity 失败:先完成 setup skill 的 Lambda 部分。
7. 渲染并检查
python3 "$S/edit.py" render edits/<name> # laptop
python3 "$S/edit.py" render edits/<name> --modal # Modal
python3 "$S/edit.py" render edits/<name> --lambda # AWS Lambda
python3 "$S/edit.py" render edits/<name> --draft # laptop, 2/3 size, quick look: render-draft.mp4
除 --draft 外,所有模式都会写入 edits/<name>/render.mp4。GitHub Actions(--github,然后运行 github-push 和 github-fetch)以及各目标的详情:references/render.md。然后,在用户查看之前:
python3 "$VPY" "$S/check.py" render edits/<name> [--plan plan.json] [--style edits/<name>/style.json]
FAIL 时返回计划或剪辑阶段;最多修复两轮,然后展示渲染结果,并说明仍存在的问题。字幕对比度 FAIL:重新制定计划,然后渲染(plan.py 会读取检查结果并调整这些页面)。完整列表:references/plan.md。
loudness ... LUFS 或片段自身的 true peak WARN 反映的是片段音量,不是剪辑中的问题。配置文件中已设置 loudness:直接照做,不询问。未设置:只询问一次,然后运行 profile.py set loudness='"leave|normalize"':
你的视频音量比大多数短视频都低。要把音量调到 Instagram 和 TikTok 预期的水平吗?(如果更响:“比大多数短视频都响。要把音量调低到它们预期的水平吗?”)详情: LUFS;这些应用播放语音时的音量约为 -14。
- 保持原音频不变(Recommended)。 不做任何处理。
- 调到应用预期的音量(或调低音量)。只调整一次音量,峰值绝不超过 -1 dB。
数字仅出现在详情行中。检查输出(FAIL、WARN、“短 2 帧”)绝不能展示给用户。
只有用户第二次选择时才运行:python3 "$S/quality.py" normalize edits/<name>/render.mp4。该命令会在同一目录写入 render-normalized.mp4;交付此文件。
8. 交付
按照审核页面交付(references/review.md),在后台运行 serve 和 wait:
python3 "${CLAUDE_PLUGIN_ROOT}/lib/ai_editor/review.py" edits/<name> round --stage edit --video edits/<name>/render.mp4
(没有页面时:start,使用相同的标志)。收到 APPROVE 后:运行 motion skill 的 save。之后修改卡片和视觉内容:使用 overlays skill(动态片段:使用 motion skill 的 note);字幕、缩放:plan、stills、render、round;剪辑:使用 cut skill。
9. 导出到其他编辑器
仅当用户要求手动完成(“在 Final Cut 中打开”“发送到 Premiere”)时:
python3 "$S/export_nle.py" edits/<name> --to fcpxml|premiere|resolve|capcut|edl|srt|all
写入 edits/<name>/export/。动态卡片会先以 alpha 渲染(每张卡片帧约 0.7 秒;请说明)。要打开哪个文件、16:9 视频的 YouTube 章节:参阅 references/render.md 中的“导出到其他编辑器”。
如果脚本停止运行
| 提示信息 | 操作 |
|---|---|
no cut.mp4 in ...(plan.py、face.py)或 cut.mp4 missing(edit.py) | 先运行 cut 技能 |
no creator style.json found for the profile's creators | 运行 creator-teardown 快速模式,然后再次运行 profile.py style |
note: ... style.json not found; planning with the default style | 没有创作者时可以忽略;profile.py style edits/<name> 会将其保留在编辑结果中 |
no cut.transcript.json(retakes.py captions) | 运行 cut 技能的验证步骤 |
the split layout is vertical only | 使用 --layout overlay 重新规划 |
check.py plan found a FAIL(edit.py stills) | 修复计划中的 FAIL,然后重新规划 |
... missing (run matte.py) | 运行 matte.py,然后再次运行 stills 或 render |
... missing (run sfx.py build, then plan.py) | 严格按提示操作 |
no Chrome Headless Shell(capture.mjs) | 运行 python3 "${CLAUDE_PLUGIN_ROOT}/skills/setup/scripts/setup.py" remotion,然后重新捕获 |
capture.mjs failed <kind> '<word>' | 移除该视觉素材,或为其提供另一个 URL;其余内容已保存 |
Modal is not set up on this computer | 执行 setup 技能中的 Modal 步骤 |
the GitHub CLI (gh) is missing / ... is public | 查看 setup 的 GitHub CLI 部分/仅使用私有仓库 |
the laptop render failed | 查看 references/render.md 中的 "If a render stops" |
the Modal render failed / the render failed. Open <url> | 说明情况,并提供笔记本电脑渲染选项 |
文件
scripts/:上方每个步骤对应一个脚本,每个脚本都有一个demo自检。${CLAUDE_PLUGIN_ROOT}/agents/template-filler.md(haiku)、stills-critic.md(sonnet):辅助工具。${CLAUDE_PLUGIN_ROOT}/remotion/:渲染器,每次运行时都会复制到~/.ai-video-editor/remotion。