Files

155 lines
3.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
name: videocut-clip
description: 执行视频剪辑。根据确认的删除任务执行FFmpeg剪辑循环直到零口误生成字幕。触发词执行剪辑、开始剪、确认剪辑
metadata:
version: "1.0.0"
alias: "videocut:剪辑"
---
<!--
input: 删除任务 TodoList口误+静音)
output: 剪辑后视频、字幕文件
pos: 执行 skill用户确认删除任务后调用
架构守护者:一旦我被修改,请同步更新:
1. ../README.md 的 Skill 清单
2. /CLAUDE.md 路由表
-->
# 剪辑
> 执行删除 → 重新审查 → 循环直到零口误 → 生成字幕
## 快速使用
```
用户: 确认,执行剪辑
用户: 全删
用户: 保留静音3和5其他都删
```
## 前置条件
需要先执行 `/videocut:剪口播` 生成删除任务 TodoList
## 流程
```
1. 读取用户确认的删除任务
2. 计算保留时间段
3. 生成 FFmpeg filter_complex
4. 执行剪辑
5. 重新转录 + 审查 ←───┐
↓ │
有口误? ──是─────────┘
↓ 否
6. 生成字幕SRT
7. 完成
```
## 进度 TodoList
启动时创建:
```
- [ ] 确认删除任务
- [ ] 执行 FFmpeg 剪辑
- [ ] 重新转录审查
- [ ] 生成字幕
```
循环时更新版本号v2→v3→...
---
## 一、读取删除任务(时间戳驱动)
`/videocut:剪口播` 输出的 TodoList 读取。**直接使用时间戳,不要搜索文本**
```
口误N处
- [x] 1. `(start-end)` 删"错误文本" → 保留"正确文本" ← 勾选=删除
语气词N处
- [x] 1. `(前字end-后字start)` 删"嗯" ← 勾选=删除
静音N处
- [x] 1. `(start-end)` 静音Xs ← 勾选=删除
- [ ] 2. `(start-end)` 静音Xs ← 未勾选=保留
```
### ⚠️ 关键规则
1. **直接用时间戳**:从 `(start-end)` 解析,不要搜索文本
2. **不要重新搜索**:审查稿已经计算好精确时间戳
3. 勾选 = 删除,未勾选 = 保留
---
## 二、FFmpeg 命令
```bash
ffmpeg -y -i input.mp4 \
-filter_complex_script filter.txt \
-map "[outv]" -map "[outa]" \
-c:v libx264 -crf 18 -c:a aac \
output.mp4
```
### filter.txt 格式
```
[0:v]trim=start=0:end=1.36,setpts=PTS-STARTPTS[v0];
[0:a]atrim=start=0:end=1.36,asetpts=PTS-STARTPTS[a0];
[0:v]trim=start=2.54:end=10.5,setpts=PTS-STARTPTS[v1];
...
[v0][a0][v1][a1]...concat=n=N:v=1:a=1[outv][outa]
```
---
## 三、重新转录审查
剪辑后必须:
1. 用 FunASR 重新转录
2. 检查是否还有口误
3. 有 → 回到 `/videocut:剪口播` 重新识别
4. 无 → 生成字幕
---
## 四、输出文件
```
01-xxx-v2.mp4 # 剪辑后视频
01-xxx-v2_transcript.json # 重新转录(验证用)
01-xxx-v2.srt # 字幕文件
```
版本递增v1→v2→v3...
---
## 五、反馈记录
### 2026-01-15
- **语气词删除边界不精确**:删语气词时把前面的字也删了
- 原因:直接用语气词的时间戳删除
- 正确:从前一字 end 到后一字 start
- **语气词 + 静音要一起删**`A [静音] 语气词 B` 要删整段 (A.end - B.start)
- **教训**:删除语气词时,边界是 `前一字.end``后一字.start`
### 2026-01-14
- 口误文字没删干净,只删了静音段
- 教训:直接从 TodoList 读取时间戳,不要重新查找
- **"拉满新"删成了"会的时候"**:搜索"拉满新"时间戳跨度7秒含6秒静音把"拉满"也删了
- 教训:对于"删前面保后面"的口误,只删差异部分
- **"AI就是AI"出现两次AI**:只删了"就是",没删第一个"AI"
- 教训:替换型口误必须删完整的第一个版本
- **系统性解决**:时间戳驱动,审查稿直接标注 `(start-end)`,剪辑脚本不再搜索文本