[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6ENM6KJ2W067D58SC58YA3P":3,"skill-same:01M6ENM6KJ2W067D58SC58YA3P":71},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":21,"linkOnly":22,"markdownContent":23,"markdownBody":24,"frontMatter":25,"refName":26,"commitSha":27,"skillDirectory":28,"forksCount":29,"repositoryHtmlUrl":30,"repositoryHomepageUrl":31,"ownerHtmlUrl":32,"ownerBlogUrl":6,"ownerDescription":33,"updatedAt":34,"install":35,"resources":48},"01M6ENM6KJ2W067D58SC58YA3P","videocut",null,"执行视频剪辑。根据确认的删除任务执行FFmpeg剪辑，循环直到零口误，生成字幕。触发词：执行剪辑、开始剪、确认剪辑","ComeOnOliver\u002Fskillshub","ComeOnOliver","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F43215937?v=4","01M6E5JNFECJAAVFE0W7SMWWD2","Haoran Shu","01M6E5JNNDQS7AJZDYFQ8TPZCK",66,"MIT","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Faiskillstore\u002Fmarketplace\u002Fceeon\u002Fvideocut\u002FSKILL.md",[],[5,19,20],"视频","生成","2026-11-10 10:12:30",false,"---\nname: videocut\ndescription: 执行视频剪辑。根据确认的删除任务执行FFmpeg剪辑，循环直到零口误，生成字幕。触发词：执行剪辑、开始剪、确认剪辑\n---\n\n\u003C!--\ninput: 删除任务 TodoList（口误+静音）\noutput: 剪辑后视频、字幕文件\npos: 执行 skill，用户确认删除任务后调用\n\n架构守护者：一旦我被修改，请同步更新：\n1. ..\u002FREADME.md 的 Skill 清单\n2. \u002FCLAUDE.md 路由表\n-->\n\n# 剪辑\n\n> 执行删除 → 重新审查 → 循环直到零口误 → 生成字幕\n\n## 快速使用\n\n```\n用户: 确认，执行剪辑\n用户: 全删\n用户: 保留静音3和5，其他都删\n```\n\n## 前置条件\n\n需要先执行 `\u002Fvideocut:剪口播` 生成删除任务 TodoList\n\n## 流程\n\n```\n1. 读取用户确认的删除任务\n    ↓\n2. 计算保留时间段\n    ↓\n3. 生成 FFmpeg filter_complex\n    ↓\n4. 执行剪辑\n    ↓\n5. 重新转录 + 审查 ←───┐\n    ↓                   │\n   有口误? ──是─────────┘\n    ↓ 否\n6. 生成字幕（SRT）\n    ↓\n7. 完成\n```\n\n## 进度 TodoList\n\n启动时创建：\n\n```\n- [ ] 确认删除任务\n- [ ] 执行 FFmpeg 剪辑\n- [ ] 重新转录审查\n- [ ] 生成字幕\n```\n\n循环时更新版本号（v2→v3→...）\n\n---\n\n## 一、读取删除任务（时间戳驱动）\n\n从 `\u002Fvideocut:剪口播` 输出的 TodoList 读取。**直接使用时间戳，不要搜索文本**：\n\n```\n口误（N处）：\n- [x] 1. `(start-end)` 删\"错误文本\" → 保留\"正确文本\"  ← 勾选=删除\n\n语气词（N处）：\n- [x] 1. `(前字end-后字start)` 删\"嗯\"  ← 勾选=删除\n\n静音（N处）：\n- [x] 1. `(start-end)` 静音Xs  ← 勾选=删除\n- [ ] 2. `(start-end)` 静音Xs  ← 未勾选=保留\n```\n\n### ⚠️ 关键规则\n\n1. **直接用时间戳**：从 `(start-end)` 解析，不要搜索文本\n2. **不要重新搜索**：审查稿已经计算好精确时间戳\n3. 勾选 = 删除，未勾选 = 保留\n\n---\n\n## 二、FFmpeg 命令\n\n```bash\nffmpeg -y -i input.mp4 \\\n  -filter_complex_script filter.txt \\\n  -map \"[outv]\" -map \"[outa]\" \\\n  -c:v libx264 -crf 18 -c:a aac \\\n  output.mp4\n```\n\n### filter.txt 格式\n\n```\n[0:v]trim=start=0:end=1.36,setpts=PTS-STARTPTS[v0];\n[0:a]atrim=start=0:end=1.36,asetpts=PTS-STARTPTS[a0];\n[0:v]trim=start=2.54:end=10.5,setpts=PTS-STARTPTS[v1];\n...\n[v0][a0][v1][a1]...concat=n=N:v=1:a=1[outv][outa]\n```\n\n---\n\n## 三、重新转录审查\n\n剪辑后必须：\n1. 用 FunASR 重新转录\n2. 检查是否还有口误\n3. 有 → 回到 `\u002Fvideocut:剪口播` 重新识别\n4. 无 → 生成字幕\n\n---\n\n## 四、输出文件\n\n```\n01-xxx-v2.mp4              # 剪辑后视频\n01-xxx-v2_transcript.json  # 重新转录（验证用）\n01-xxx-v2.srt              # 字幕文件\n```\n\n版本递增：v1→v2→v3...\n\n---\n\n## 五、反馈记录\n\n### 2026-01-15\n- **语气词删除边界不精确**：删语气词时把前面的字也删了\n  - 原因：直接用语气词的时间戳删除\n  - 正确：从前一字 end 到后一字 start\n- **语气词 + 静音要一起删**：`A [静音] 语气词 B` 要删整段 (A.end - B.start)\n- **教训**：删除语气词时，边界是 `前一字.end` 到 `后一字.start`\n\n### 2026-01-14\n- 口误文字没删干净，只删了静音段\n- 教训：直接从 TodoList 读取时间戳，不要重新查找\n- **\"拉满新\"删成了\"会的时候\"**：搜索\"拉满新\"时间戳跨度7秒（含6秒静音），把\"拉满\"也删了\n  - 教训：对于\"删前面保后面\"的口误，只删差异部分\n- **\"AI就是AI\"出现两次AI**：只删了\"就是\"，没删第一个\"AI\"\n  - 教训：替换型口误必须删完整的第一个版本\n- **系统性解决**：时间戳驱动，审查稿直接标注 `(start-end)`，剪辑脚本不再搜索文本\n","\u003C!--\ninput: 删除任务 TodoList（口误+静音）\noutput: 剪辑后视频、字幕文件\npos: 执行 skill，用户确认删除任务后调用\n\n架构守护者：一旦我被修改，请同步更新：\n1. ..\u002FREADME.md 的 Skill 清单\n2. \u002FCLAUDE.md 路由表\n-->\n\n# 剪辑\n\n> 执行删除 → 重新审查 → 循环直到零口误 → 生成字幕\n\n## 快速使用\n\n```\n用户: 确认，执行剪辑\n用户: 全删\n用户: 保留静音3和5，其他都删\n```\n\n## 前置条件\n\n需要先执行 `\u002Fvideocut:剪口播` 生成删除任务 TodoList\n\n## 流程\n\n```\n1. 读取用户确认的删除任务\n    ↓\n2. 计算保留时间段\n    ↓\n3. 生成 FFmpeg filter_complex\n    ↓\n4. 执行剪辑\n    ↓\n5. 重新转录 + 审查 ←───┐\n    ↓                   │\n   有口误? ──是─────────┘\n    ↓ 否\n6. 生成字幕（SRT）\n    ↓\n7. 完成\n```\n\n## 进度 TodoList\n\n启动时创建：\n\n```\n- [ ] 确认删除任务\n- [ ] 执行 FFmpeg 剪辑\n- [ ] 重新转录审查\n- [ ] 生成字幕\n```\n\n循环时更新版本号（v2→v3→...）\n\n---\n\n## 一、读取删除任务（时间戳驱动）\n\n从 `\u002Fvideocut:剪口播` 输出的 TodoList 读取。**直接使用时间戳，不要搜索文本**：\n\n```\n口误（N处）：\n- [x] 1. `(start-end)` 删\"错误文本\" → 保留\"正确文本\"  ← 勾选=删除\n\n语气词（N处）：\n- [x] 1. `(前字end-后字start)` 删\"嗯\"  ← 勾选=删除\n\n静音（N处）：\n- [x] 1. `(start-end)` 静音Xs  ← 勾选=删除\n- [ ] 2. `(start-end)` 静音Xs  ← 未勾选=保留\n```\n\n### ⚠️ 关键规则\n\n1. **直接用时间戳**：从 `(start-end)` 解析，不要搜索文本\n2. **不要重新搜索**：审查稿已经计算好精确时间戳\n3. 勾选 = 删除，未勾选 = 保留\n\n---\n\n## 二、FFmpeg 命令\n\n```bash\nffmpeg -y -i input.mp4 \\\n  -filter_complex_script filter.txt \\\n  -map \"[outv]\" -map \"[outa]\" \\\n  -c:v libx264 -crf 18 -c:a aac \\\n  output.mp4\n```\n\n### filter.txt 格式\n\n```\n[0:v]trim=start=0:end=1.36,setpts=PTS-STARTPTS[v0];\n[0:a]atrim=start=0:end=1.36,asetpts=PTS-STARTPTS[a0];\n[0:v]trim=start=2.54:end=10.5,setpts=PTS-STARTPTS[v1];\n...\n[v0][a0][v1][a1]...concat=n=N:v=1:a=1[outv][outa]\n```\n\n---\n\n## 三、重新转录审查\n\n剪辑后必须：\n1. 用 FunASR 重新转录\n2. 检查是否还有口误\n3. 有 → 回到 `\u002Fvideocut:剪口播` 重新识别\n4. 无 → 生成字幕\n\n---\n\n## 四、输出文件\n\n```\n01-xxx-v2.mp4              # 剪辑后视频\n01-xxx-v2_transcript.json  # 重新转录（验证用）\n01-xxx-v2.srt              # 字幕文件\n```\n\n版本递增：v1→v2→v3...\n\n---\n\n## 五、反馈记录\n\n### 2026-01-15\n- **语气词删除边界不精确**：删语气词时把前面的字也删了\n  - 原因：直接用语气词的时间戳删除\n  - 正确：从前一字 end 到后一字 start\n- **语气词 + 静音要一起删**：`A [静音] 语气词 B` 要删整段 (A.end - B.start)\n- **教训**：删除语气词时，边界是 `前一字.end` 到 `后一字.start`\n\n### 2026-01-14\n- 口误文字没删干净，只删了静音段\n- 教训：直接从 TodoList 读取时间戳，不要重新查找\n- **\"拉满新\"删成了\"会的时候\"**：搜索\"拉满新\"时间戳跨度7秒（含6秒静音），把\"拉满\"也删了\n  - 教训：对于\"删前面保后面\"的口误，只删差异部分\n- **\"AI就是AI\"出现两次AI**：只删了\"就是\"，没删第一个\"AI\"\n  - 教训：替换型口误必须删完整的第一个版本\n- **系统性解决**：时间戳驱动，审查稿直接标注 `(start-end)`，剪辑脚本不再搜索文本\n",{"name":5,"description":7},"main","def8531e65114c0fca8fb8551c1871ee0eed705c","skills\u002Faiskillstore\u002Fmarketplace\u002Fceeon\u002Fvideocut",24,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub","https:\u002F\u002Fskillshub.wtf","https:\u002F\u002Fgithub.com\u002FComeOnOliver","AI & Blockchain Engineer\r\n","2026-06-24 22:07:19",{"source":8,"skillName":5,"commands":36,"prompt":46,"zipAvailable":47},[37,40,43],{"tool":38,"command":39},"npx","npx skills add ComeOnOliver\u002Fskillshub --skill videocut",{"tool":41,"command":42},"bunx","bunx skills add ComeOnOliver\u002Fskillshub --skill videocut",{"tool":44,"command":45},"pnpm","pnpm dlx skills add ComeOnOliver\u002Fskillshub --skill videocut","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Faiskillstore\u002Fmarketplace\u002Fceeon\u002Fvideocut\u002FSKILL.md",true,[49,55,59,63,67],{"path":50,"resourceType":51,"resourceTypeDesc":52,"sizeBytes":53,"sourceHtmlUrl":54},"README.md","REFERENCE","参考文档",409,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Faiskillstore\u002Fmarketplace\u002Fceeon\u002Fvideocut\u002FREADME.md",{"path":56,"resourceType":51,"resourceTypeDesc":52,"sizeBytes":57,"sourceHtmlUrl":58},"skill-report.json",10797,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Faiskillstore\u002Fmarketplace\u002Fceeon\u002Fvideocut\u002Fskill-report.json",{"path":60,"resourceType":51,"resourceTypeDesc":52,"sizeBytes":61,"sourceHtmlUrl":62},"tips\u002F口误识别方法论.md",6783,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Faiskillstore\u002Fmarketplace\u002Fceeon\u002Fvideocut\u002Ftips\u002F口误识别方法论.md",{"path":64,"resourceType":51,"resourceTypeDesc":52,"sizeBytes":65,"sourceHtmlUrl":66},"tips\u002F转录最佳实践.md",7868,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Faiskillstore\u002Fmarketplace\u002Fceeon\u002Fvideocut\u002Ftips\u002F转录最佳实践.md",{"path":68,"resourceType":51,"resourceTypeDesc":52,"sizeBytes":69,"sourceHtmlUrl":70},"词典.txt",48,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Faiskillstore\u002Fmarketplace\u002Fceeon\u002Fvideocut\u002F词典.txt",[72,86,96,105,111,118],{"skillNo":73,"name":74,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":75,"categories":76,"keywords":82,"publishedAt":21},"01M6FKJN13GMG4KY57J3QD8GY5","model-hierarchy-skill","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzscole\u002Fmodel-hierarchy-skill\u002Fmodel-hierarchy-skill\u002FSKILL.md",[77],{"categoryNo":78,"categoryName":79,"taxonomyType":80,"taxonomyTypeDesc":81},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[83,84,85],"model","model hierarchy","model hierarchy skill",{"skillNo":87,"name":88,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":89,"categories":90,"keywords":92,"publishedAt":21},"01M6FKJJJ6GCAMR4PPPRD12M5X","zoom-mcp","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-mcp\u002FSKILL.md",[91],{"categoryNo":78,"categoryName":79,"taxonomyType":80,"taxonomyTypeDesc":81},[93,94,95],"MCP","zoom","zoom mcp",{"skillNo":97,"name":98,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":99,"categories":100,"keywords":101,"publishedAt":21},"01M6FKJE3KYT3KPEZMEEHYKA6K","zoom-apps-sdk","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-apps-sdk\u002FSKILL.md",[],[102,103,104,94],"sdk","zoom apps sdk","apps",{"skillNo":106,"name":107,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":108,"categories":109,"keywords":110,"publishedAt":21},"01M6FKJ9EDH9Q5VWDF8HAJRSP0","windows","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwindows\u002FSKILL.md",[],[107],{"skillNo":112,"name":113,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":114,"categories":115,"keywords":117,"publishedAt":21},"01M6FKJ666BEEFC3AE9GJ72Q93","whiteboard","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwhiteboard\u002FSKILL.md",[116],{"categoryNo":78,"categoryName":79,"taxonomyType":80,"taxonomyTypeDesc":81},[113],{"skillNo":119,"name":120,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":121,"categories":122,"keywords":123,"publishedAt":21},"01M6FKJ21WFCDGTJQ2Q91T9DVW","websockets","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwebsockets\u002FSKILL.md",[],[120]]