导入字幕/SKILL.md
视频转录 + AI校对 → 一键生成带花字的剪映草稿(默认)/ 或导出 SRT 文件。触发词:导入字幕、导出字幕、生成剪映草稿、带花字字幕、生成SRT
npx skillsauth add ceeon/videocut-skills videocut:导入字幕Install this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
火山引擎转录 → AI 校对 → 默认直接生成剪映草稿(带花字+动画) 可选输出 SRT 文件(老流程)
首次运行 srt_to_draft.py 会自动检测 capcut-mate 服务,没起就自己装+启,用户无感。
首次使用前还需配一次火山 apikey(转录用)——在 .claude/skills/.env 填 VOLCENGINE_API_KEY=xxx,详见 安装/SKILL.md。只配一次,之后所有视频复用。
向用户确认(只问原稿,不问花字/动画):
用户: 导入字幕 / 导出字幕 → 默认走草稿模式
用户: 生成剪映草稿 → 草稿模式
用户: 带花字字幕 火焰燃烧花字 → 草稿模式 + 花字
用户: 生成SRT / 出字幕文件 → SRT 模式(老流程)
0. 查找视频 + 跟用户确认(原稿?花字/动画?)
↓
1. 字幕识别(提取音频 → 上传 → 火山引擎转录 → subtitles_with_time.json)
↓
2. 修正(AI 逐条校对,有原稿则对照)
↓
3. 推送剪映草稿(本 Skill 核心:一键下载环境 + 踩坑内置 + 默认预设)
↓
4. 输出 SRT 文件(3_输出/video.srt,老流程兼容)
↓
5. 给用户同时报两个位置(SRT 路径 + 草稿名)
SRT 文件永远会落到 3_输出/video.srt,同时默认调 srt_to_draft.py 推进剪映。
用户明确说"只要 SRT 别推草稿"才跳过推送。
output/YYYY-MM-DD_视频名/字幕/
├── 1_转录/
│ ├── audio.mp3
│ └── volcengine_result.json
├── subtitles_with_time.json
└── 3_输出/
└── video.srt ← SRT 模式产物(可选)
草稿模式产物落在 ~/Movies/JianyingPro/User Data/Projects/com.lveditor.draft/{草稿名}/。
优先级:用户传入 > 剪口播/3_审核/*_cut.mp4 > 原始视频
OUTPUT_DIR="output/YYYY-MM-DD_视频名"
CUT_VIDEO=$(find "$OUTPUT_DIR/剪口播/3_审核" -name "*_cut.mp4" -type f 2>/dev/null | head -1)
VIDEO_PATH="${CUT_VIDEO:-用户传入的路径}"
⚠️ 字幕 / 文字稿必须基于剪辑后视频重新转录,不能用原始视频或 delete_segments.json 反推(容易误删内容,时间戳也可能不匹配)。
你: 开始前先问一下——有没有口播原稿?(有的话请给路径,没有的话产品名/术语可能不准)
(花字/动画默认不加,不要问;用户主动要求才加)
用户没回复原稿这一项,就等用户明确回复再继续,不要自己假设"没有"。
cd 字幕/1_转录
ffmpeg -i "file:$VIDEO_PATH" -vn -acodec libmp3lame -y audio.mp3
curl -s -F "files[][email protected]" https://uguu.se/upload
SKILL_DIR="/Volumes/成峰/代码/剪辑Agent/.claude/skills/剪口播"
bash "$SKILL_DIR/scripts/volcengine_transcribe.sh" "https://xxx.mp3"
const result = JSON.parse(fs.readFileSync('volcengine_result.json'));
const subtitles = result.utterances.map((u, i) => ({
id: i + 1,
text: u.text,
start: u.start_time / 1000,
end: u.end_time / 1000
}));
fs.writeFileSync('subtitles_with_time.json', JSON.stringify(subtitles, null, 2));
逐条阅读全部字幕,手动校对。
| 误识别 | 正确 | |--------|------| | CE/ce/c | C1(或具体产品名) | | 正特/整特/IT | Agent | | cloud code | Claude Code | | 成风/乘风 | 成峰 | | 艺人 | 一人 |
python3 scripts/srt_to_draft.py output/*/字幕/3_输出/video.srt \
--name 我的视频 \
--effect 火焰燃烧花字 \
--anim 渐显
--name 草稿名--effect 花字(可选,见 references/花字清单.md)--anim 入场动画(可选,见 references/动画清单.md)10、行间距 13、黄字、黑描边、贴底、4:3 画布--font-size、--line-spacing、--width、--height、--text-color、--border-color、--transform-y关闭服务:bash scripts/stop.sh
function toSRT(sec) {
const h = Math.floor(sec / 3600);
const m = Math.floor((sec % 3600) / 60);
const s = Math.floor(sec % 60);
const ms = Math.round((sec % 1) * 1000);
return `${h.toString().padStart(2,'0')}:${m.toString().padStart(2,'0')}:${s.toString().padStart(2,'0')},${ms.toString().padStart(3,'0')}`;
}
let srt = '';
subtitles.forEach((s, i) => {
srt += (i + 1) + '\n' + toSRT(s.start) + ' --> ' + toSRT(s.end) + '\n'
+ s.text.replace(/[。!?]+$/g, '') + '\n\n';
});
fs.writeFileSync('3_输出/video.srt', srt.trim());
✅ 搞定,两个产物都给你:
📄 SRT 文件
output/YYYY-MM-DD_视频名/字幕/3_输出/video.srt
(如果你已经在剪映里剪过这条视频,直接把这个 .srt 拖进时间线即可)
🎬 剪映草稿
Cmd+Q 退出剪映 → 重开 → 首页找「我的视频-xxxxxxxx」
SRT 路径必须明确告知。很多时候用户已经在剪映里剪好了视频,新草稿对他没用, 他要的就是那个 SRT 文件自己拖进现有草稿。
| 规则 | 说明 |
|------|------|
| 一屏一行 | 不换行 |
| 句尾无标点 | 你好 不是 你好。 |
| 句中保留标点 | 先点这里,再点那里 |
content-media
自进化 skills。记录用户反馈,更新方法论和规则。触发词:更新规则、记录反馈、改进skill
development
口播视频成片 Skill。把文章/口播稿/SRT、剪后视频和 HTML/图片素材串成分镜稿、时间线预览和最终 1080x1440 竖版 MP4。触发词:口播成片、做分镜稿、时间线预览、合成口播视频、导出竖屏MP4
data-ai
口播基础素材包生成。转录口播、识别口误、生成审核页;用户确认后剪出新视频,Agent 再基于剪后视频重新转写、AI 校对字幕,输出后续口播成片可用的 source_cut.mp4 和 subtitles.srt。触发词:剪口播、处理口播素材、准备口播素材、识别口误、基础素材包
content-media
视频高清导出。2-pass编码+锐化,匹配或超越原片画质。触发词:高清化、高清导出、导出高清、渲染高清