新增16个AI技能:包含图像生成、视频剪辑、数据分析、智能查询等功能模块
This commit is contained in:
154
.opencode/skills/videocut-clip/SKILL.md
Normal file
154
.opencode/skills/videocut-clip/SKILL.md
Normal file
@@ -0,0 +1,154 @@
|
||||
---
|
||||
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)`,剪辑脚本不再搜索文本
|
||||
Reference in New Issue
Block a user