视频编辑器
一个技能,三部分。先阅读本文件,然后阅读引擎规则和适用的预设,再接触素材。
| 部分 | 阅读 | 内容 |
|---|---|---|
| 引擎 | engine/ENGINE.md, engine/helpers/ | 转录 (Scribe), takes_packed.md, EDL, render.py, grade.py, timeline_view.py, 12 条硬性规则, ask → confirm → execute → self-eval 循环。改编自 browser-use/video-use (MIT)。 |
| Instagram 预设 | presets/instagram/PRESET.md | 竖屏 1080×1920: 安全区域, Reel 节奏, 字幕样式 (scripts/ig-captions.py), 标题字体 (assets/fonts/), 调色规则, 免费音效规则 |
| YouTube 预设 | presets/youtube/PRESET.md | 16:9 / 4K: 剪辑阶段 (paper cut, tighten, sliver, edge audit, dead air), HyperFrames 合成器及其约 40 种格式库, 镜头, 声音, B-roll, Tella, 组装, 验证。改编自 WeAreNoCode youtube-edit 工具包;可选,不捆绑 (presets/youtube/README.md)。如果缺少 PRESET.md,则使用引擎自身的剪辑规则。 |
| 共享 | shared/ | luts/ (Cine_TealOrange, Cine_Film, Cine_Moody, AppleLog_to_Rec709, AppleLog_Cine_*; make_luts.py 可重建它们), sfx/ (你的音效, -3 dBFS, manifest.json), music/ (你的音轨), tools/ (build-manifest.py, 剪辑工具), img/ |
脚本优先: 当用户还没有脚本,或要求钩子、想法或字幕时,使用 script-writer 技能;其脚本末尾包含编辑器注释,本技能执行这些注释。
使用哪个预设
| 请求 | 使用 |
|---|---|
| Instagram, Reel, story, TikTok, Shorts, 竖屏素材, 或未指定平台但素材为竖屏 | Instagram 预设 (它会从 YouTube 预设借用剪辑阶段、格式、镜头和声音;它会在相应位置说明) |
| YouTube, 钩子, 长视频, 16:9 / 4K, Tella 教程, 组装片段 | YouTube 预设 |
| 其他任何内容 (蒙太奇, 旅行, 访谈, 通用的 16:9 编辑) | 引擎 单独, 加上 shared/ 的视觉效果和声音;在适当时借用预设规则 |
| 需要高亮的屏幕录制 | 根据将发布的位置选择预设:对区域进行缩放,调暗或模糊其余部分,在单词上添加框或下划线,点击和打字声音,模糊隐私数据;在 Reel 中,录制内容位于手机或浏览器框架内,或裁剪到重要部分 |
不确定?问一次:“这是用于 Instagram 还是 YouTube?”
路径(在每个命令中使用)
VE=~/.claude/skills/video-editor; VU="$VE/engine"; VU_PY="$VE/.venv/bin/python"
IG="$VE/presets/instagram"; YT="$VE/presets/youtube"; SK="$YT"; SHARED="$VE/shared"
所有输出均放在 <素材文件夹>/edit/ 下(引擎的硬性规则 12);除非有意保存规则、LUT 或共享资源,否则不要写入 $VE 内部。
适用于一切的硬性规则
- 转录需要付费 (Scribe 点数)。 除非用户交出素材并要求编辑,否则不要进行转录。转录结果按文件基名缓存;在重新剪辑 flat cut 后删除其缓存的 JSON。
- 先策略后执行: 描述素材,提出计划 (预设、字幕样式、外观、音乐、时长),等待确认。
- 字幕与副标题放在最后添加,在所有覆盖层之后。
- 每个视频只调色一次,在提取阶段按片段进行;保护肤色;检查调色前/后的帧。
- 验证渲染文件 (每个剪辑点的帧数、响度 -14 LUFS、时长),然后展示给用户。
- Python 辅助工具使用
$VU_PY运行;系统自带的python3缺少 numpy。
剪辑类型
shared/references/cuts.md:包含 10 种剪辑(cut, jump, match, J, L, fade, dissolve, cut on action, cross-cutting, smash)及其适用场景和执行工具 (shared/tools/)。两个预设和 cinematic 技能都会使用它。
运动图形
shared/references/motion-graphics.md:包含每次动画都要检查的 7 条质量规则、参考来源、学习循环(参考 → 参数 → 模板 → 笔记 → 保存)以及模板跟踪器。在构建任何动画前阅读它;在手动构建效果前搜索 HyperFrames 注册表。
渲染阶梯(始终遵循,每个视频都执行)
- 审查渲染为 720p(快速;用户观看和给出意见的版本):
引擎
render.py … --draft(720×1280 / 1280×720), HyperFramesrender … --quality draft在合成的副本上(宽度 720 或默认值,并添加-o review.mp4然后scale=720:-2);字幕使用ig-captions.py --width 720 --height 1280. 在此文件上运行自我评估。 - 只有在用户批准审查后(无未解决意见)才以 4K 输出最终版:
引擎
render.py … --uhd(2160×3840 竖屏 / 3840×2160 横屏, CRF 18), HyperFramesrender … --resolution portrait-4k --quality high(或landscape-4k;在 2x DPR 下渲染 1080×1920 合成,确保文字和图形真正清晰), 字幕ig-captions.py --width 2160 --height 3840(相同布局,按比例缩放),音乐/响度母带照常处理 (-14 LUFS). 验证:ffprobe显示 2160×3840, BT.709 标签, 时长与审查版一致。 - 同时交付两个版本:
<project>-4k.mp4(母版,用于上传 / YouTube / 归档) 和<project>-1080.mp4(从 4K 母版通过scale=1080:-2:flags=lanczos制作的高比特率 1080×1920 副本,约 20 Mb/s)。 如实告知用户:Instagram 播放 Reels 最高可达 1080×1920 并会对每次上传重新编码,因此 4K 是通过为其编码器提供最干净的源素材来改善画质(并为 YouTube/TikTok/未来复用保持最高质量),而不是显示 4K;请打开 Instagram > 设置 > 媒体质量 > "以最高质量上传"。如果素材本身是 1080p 拍摄的,则 4K 母版会被放大(不会增加细节);请如实说明。如果最终版本需要修改,则再次进行 720p 审查,然后重新输出 4K。
机器设置(仓库根目录下的 install.sh 完成大部分工作)
| 工具 | 状态 | 检查 |
|---|---|---|
| ffmpeg 完整构建 (libass, zscale, lut3d) | ffmpeg-full 链接到 ffmpeg | `ffmpeg -filters |
| Python 环境 | $VE/.venv (requests, numpy, pillow, librosa, matplotlib) | cd $VE && uv sync |
| ElevenLabs 密钥 | $VU/.env (权限 600) | curl -s -o /dev/null -w '%{http_code}' -H "xi-api-key: $(sed -n 's/^ELEVENLABS_API_KEY=//p' $VU/.env)" https://api.elevenlabs.io/v1/user → 200 |
| Node + HyperFrames CLI | Node 26, hyperframes 全局安装 | hyperframes doctor |
| HyperFrames 代理技能 | 由 CLI 作为独立技能安装 (hyperframes, hyperframes-core, -animation, -keyframes, -registry, media-use, ...) | hyperframes skills check;阅读它们以了解合成约定 |
| auto-editor, yt-dlp, Chrome | 已安装 | auto-editor --version, yt-dlp --version |
| YouTube 预设测试(如果已安装) | 全部通过 | cd $YT/scripts && $VU_PY -m unittest tests |
使其成为你的
- "保存到技能": 将笔记作为一条普通规则写在它所属的位置:仅 Instagram → Instagram 预设;仅 YouTube → YouTube 预设;两者通用 → YouTube 预设的共享部分(Instagram 预设会指向那里),或者如果涉及路由或设置则写在此文件中。如果新规则与旧规则矛盾,则替换旧规则;切勿同时保留两者。
- 新的外观:编辑
shared/luts/make_luts.py中的LOOKS,使用$VU_PY运行,在 Instagram 预设的调色表中添加一行。新的字幕样式:在字幕表中添加一行,并在ig-captions.py的STYLES中添加一个条目。 - 引擎更新: 将上游 https://github.com/browser-use/video-use 克隆到某处 (
git pull),然后使用diff -r <clone>/helpers $VU/helpers进行比较,并手动复制更改;引擎副本仅在ENGINE.md中有本地路径修改。