--- name: space-video-edit description: 口播视频剪辑,两阶段——(1) 剪口播:转写→识别口误/语气词/静音/重复/卡顿/残句→生成审核页→用户确认后剪出干净视频→重转写并 AI 校对字幕;(2) 成片:把剪后视频+字幕+素材串成分镜、时间轴预览、导出最终 MP4。当用户说「剪这条口播」「删掉口误」「处理录屏素材」「口播成片」「做时间轴」「导出竖屏视频」「videocut」时触发。 --- # space-video-edit · 口播剪辑与成片 口播剪辑分两步,别混在一起:**先剪出一条干净的(剪口播),再包装成成片(成片)。** ## 阶段一:剪口播(出干净素材) 目标:把一条原始录屏,剪成没有口误、卡顿、废话的 `source_cut.mp4` + 校对过的 `subtitles.srt`。 ### 流程 ```text 原视频 → ①转录(带时间词级) → ②识别删除候选 → ③生成审核网页 → 用户确认删哪里 → ④ffmpeg 剪出新视频 → ⑤基于剪后视频重新转写 → ⑥AI 校对字幕 → 输出 ``` 字幕**必须基于剪后视频重新转写再校对**,不能沿用原视频字幕,也不能拿转写初稿当最终字幕。 ### 识别哪些该删(检测器) 按 `references/删除检测规则.md` 逐类扫描:静音段、语气词、连续语气词、卡顿词、逐字重复、残句、重说纠正。 ### 怎么删(两条铁律) 1. **删前保后**:后说的通常更完整 → 删前面的口误/残句/重复第一次,保后面完整的。详见 `references/删前保后.md`。 2. **风险分层复核**:「删字」安全、「删意思」危险。复核只砸在高风险处(整句删除、开头撞结尾岔、长重复),低风险交末端人工审核页兜底。详见 `references/删除风险分层.md`。 ### 剪切执行 标记确认后,用 `scripts/cut_by_ranges.sh` 按「保留区间」无损拼接(避免逐段删的误差累积): ```bash bash scripts/cut_by_ranges.sh 原视频.mp4 keep_ranges.json source_cut.mp4 ``` ### 产出 ```text output/YYYY-MM-DD_视频名/ ├── 剪口播/1_转录/{audio.mp3, words.json} ├── 剪口播/2_分析/{readable.txt, 口误分析.md, auto_selected.json} ├── 剪口播/3_审核/review.html ├── source_cut.mp4 └── subtitles.srt # 剪后重转写 + AI 校对 ``` ## 阶段二:口播成片 把 `source_cut.mp4 + subtitles.srt + 素材` 做成完整成片。**只解决一件事:出成片。** 比例和动画风格读用户配置。 ```text 输入(剪后视频+字幕+素材) → ① 分镜稿:概念分段 + 每段类型判定 + 画面来源(原视频/截图/HTML/B-roll) → ② 时间线预览:画面与口播逐秒对齐(HTML 预览页) → ③ 合成:按配置比例导出 MP4 → ④ 验收:ffprobe 检查时长/分辨率 + 抽关键帧核对 ``` ### 用户配置 ```json { "aspectRatio": "3:4", "animationStyle": "极简深色" } ``` 每次先读配置,决定成片比例和动画风格。B-roll/动画画面本身交 `space-video-broll` 生成,本阶段只负责**对齐和合成**。 ## 交接 - 上游:`space-video-script` 的 `script.md`(分镜依据)、录制的原视频 - 平行:B-roll 找 `space-video-broll`,字幕精修找 `space-video-subtitle` - 下游:成片 → `space-video-cover` 出封面 ## 依赖 `ffmpeg` / `ffprobe`、`node`(跑审核页/预览页)、一个 ASR 后端(转写与重转写)。 ## 核心原则 - **删前保后** > 一切子规则 - **删字安全,删意思危险**:复核按风险投放,不铺满 - **剪口播和成片分开**:先出干净素材,再谈包装 - **一切可回看**:审核页让人一眼看到删哪、成片前时间轴对齐