reel-recut 是一个规范驱动的竖屏口播短视频剪辑技能,目标是把原始或轻度剪辑的竖屏口播素材处理成完整的短视频成片效果。
用途 它围绕四个标志性元素工作:顶部常驻标题横幅(圆角、品牌强调色块、加粗、大写、1 至 2 行);底部卡拉 OK 式字幕(粗白字配厚黑描边、清理后的短语、每条约 2 秒);屏幕中部的标注框(用于插入旁白或评论关键词的行动号召,与横幅同样式);以及“自我叠说”式紧凑节奏,即把句间停顿做静音剪切,让句子彼此紧接。原有音乐、B-roll 和音频均保留。
主要能力 整套剪辑用一个 JSON 规范描述,由 scripts/build_reel.py 单次渲染完成。样式由规范的 style 块驱动,而非硬编码:强调色、字体、字重、字号和位置都可设置。默认值(紫色 #8030F8 色块、Montserrat Black/ExtraBold,首次运行时从 Google OFL 自动下载)只是某个示例创作者品牌的反推结果,用于让脚本开箱即用,可替换为用户自己的品牌值,或从被要求匹配的参考视频中采样提取。
支持原始剪辑模式:完全省略 banner、captions 和 callouts,脚本会跳过叠加流程,只保留节奏剪辑,适用于品牌合作中由品牌方剪辑师完成后续叠加的场景;配合 "fps": "source" 可避免把 60fps 母版降采样到 30fps。
使用方式 先从 URL 获取素材(如 yt-dlp 下载 IG Reel、TikTok、YouTube 视频),再以本地路径输入。工作流程为:用 ffprobe 探测并观看素材(可用 claude-video-vision 插件或普通抽帧),若匹配新参考则从中提取横幅、字幕、标注框样式写入 spec 的 style 块;转录目标语音并获取词级时间戳(本地 whisper-cli -ojf,或 OpenAI Whisper verbose_json 并设置 timestamp_granularities=["word"]);编写 spec(横幅写 1 至 2 行简短大写文案,字幕按约 2 秒、每行不超过约 6 个词切分并清理语气词、修正转录错误,按需添加 callout 并通过 suppress_captions 避免同一文字重复出现,stumble 或废片用 manual_cuts 的 [[start,end]] 区间删除);然后运行 python3 scripts/build_reel.py spec.json 渲染,脚本会输出新时长与计数,并在 spec 旁生成 <spec>.qa-manifest.json 记录每次剪切、字幕与标注框的源时间与输出时间。
环境约束 所有文字用 PIL 渲染成透明 PNG 再由 ffmpeg overlay 合成,因为部分 ffmpeg 构建缺少 libass/libfreetype(没有 drawtext 与 subtitles),这样做完全可移植,不应改写为 drawtext 方案。图形预合成为一个覆盖层视频,最终渲染只有 2 个输入;不要手工构建 30 输入的 filtergraph,可能让 16 GB 机器内存溢出。若智能体沙箱杀掉 ffmpeg(SIGURG 或异常退出码),可禁用沙箱后重跑。ffmpeg/ffprobe 取自 PATH,可用 FFMPEG/FFPROBE 环境变量覆盖;本地转录用 whisper-cli 加 ggml 模型,云端 Whisper 需在仓库根目录的 .env 中提供 OPENAI_API_KEY。
适用场景与限制 适用于竖屏口播短视频的快速成片、按参考视频匹配风格的翻剪、品牌合作的首轮粗剪,以及长素材(如 258 秒源、140 处剪切)的节奏处理。噪声较大的素材(车内、咖啡馆、风扇、户外手持)会让基于 ffmpeg silencedetect 的静音剪切几乎失效,此时应改用 VAD 驱动的 manual_cuts 并配合 scripts/plan_cuts.py。接缝处容易产生可听爆音,需对所有拼接处做去咔哒处理,并让视频与音频使用相同的取整规则;不要逐段编码成独立文件后流复制拼接,否则每处接缝会累积约 50ms 的 AAC 编码填充延迟。manifest 中重映射的词不是可靠词表,应基于渲染成片的新转录建立词映射。对已付费的品牌交付物,脚本中的文案视为已批准文案,只能删除脚本标记的备选(Hook 1 / Hook 2、备选镜头)和真实口误,不得为达到时长目标而删减已批准台词。长镜头处理存在若干已知陷阱,具体做法见随附的 references/workflow.md 与 references/spec.md。