运行时依赖
安装命令
点击复制技能文档
wjs-segmenting-video 将长视频 + SRT 分割成多个独立的短片,每个短片针对目标平台。该技能在分割和裁剪后停止,然后将原始剪辑传递给 /wjs-overlaying-video 进行封面、字幕、插图、CTA 和最终渲染。
何时使用:长视频(≥10分钟)且已有 SRT 转录。目标是创建独立的短片(每个短片可独立观看)。
何时不使用:单主题修剪 → 只需使用 ffmpeg -ss A -to B。尚无转录 → 先运行 /wjs-transcribing-audio(然后运行 /wjs-translating-subtitles 如果片段需要非源语言)。多机位编辑 → 使用 /wjs-editing-multicam。集锦带有多个剪辑 → 这是编辑,而不是分段。
该技能是什么 —— 以及不是什么 是什么:您(代理)阅读完整的 SRT 并决定主题边界。一个运行 NLP 主题建模、静默检测或“病毒时刻”评分的脚本。主题边界是语义的;竞争工具(Descript、OpusClip、Riverside Magic Clips)都通过自动化而出错。 不是:一个端到端的“魔术”管道。烧录字幕、封面、介绍、CTA(这些存在于 /wjs-overlaying-video 中)。
管道:长视频 + SRT ↓(代理阅读 SRT,决定主题 —— 判断,而不是解析)segments.json ↓ segment.py --reencode(准确寻找;剪辑从请求的时间戳开始)clip_NN.mp4 + frame_NN.jpg ↓ ASK:目标平台方向与源匹配?↓ /wjs-reframing-video 对每个剪辑(如果 16:9 → 9:16 等)↓ 从裁剪剪辑中重新提取帧 clip_NN.mp4(现在在目标方向)+ clip_NN.zh-CN.burn.srt ↓ 交接 → /wjs-overlaying-video(进行封面 + 字幕 + 插图 + CTA + 最终渲染)
步骤 1 —— 阅读 SRT,写入 segments.json 不要将主题识别外包给脚本。对于每个候选段,判断:自成体系?冷启动观众必须在没有先前上下文的情况下理解它。单线程?一个中心问题/见解;如果演讲者在剪辑中间转变,那就是两个段。长度适合平台?60-180 秒用于 视频号 / 30-60 秒用于 抖音&Shorts。 <30 秒感觉被截断;>4 分钟会失去关注。钩子 + 收获?以声明/问题/生动图像开头;以收获结尾。永远不要在句子中间结束。快照到 SRT 提示边界 —— 永远不要在单词中间剪切。从 10 分钟的源中通常会有 3-6 个强大的段。
模式(完整规格在 references/segments_schema.json 中,示例在 references/example_segments.json 中): { "source_video": "input.mp4", "source_srt": "input.zh-CN.srt", "platform": "wechat_channels", "segments": [ { "id": 1, "slug": "intent-not-code", "title": "AI 时代不是写代码\n而是写意图", "summary": "两句宣传 —— 什么是见解,什么是风险。", "start": "00:00:43.460", "end": "00:02:35.220", "cover_prompt": "gpt-image-2 的视觉概念(风格锚点,而不是字面场景)" } ] }
步骤 2 —— 准确寻找剪切 python3 ~/.claude/skills/wjs-segmenting-video/scripts/segment.py --segments segments.json --out output/ --reencode --reencode 是默认推荐模式。它使用 ffmpeg -ss N -i src -c:v libx264 -c:a aac 剪切,因此输出从请求的时间戳开始。每个剪辑大约需要 30 秒的 CPU 时间。它还提取每个段的中点帧到 output/frame_NN_slug.jpg。
为什么默认使用 --reencode 而不是 stream-copy:stream-copy 通过 ffmpeg -ss N -c copy 寻找最近的关键帧之前的 N(它不能重新编码)。输出的 t=0 然后映射到源 t=关键帧,因此剪辑在请求的语音之前播放一小部分“引导”内容。字幕从主 SRT 在边界 N 处切片,出现在音频之前,正好是 GOP 分数 —— 听众感觉“字幕领先于声音”。在 H.264 源上,GOP=2s:每个剪辑都偏移 0.6-1.5 秒。看起来像一个同步错误;实际上这是一个剪切时间错误。
stream-copy 变体(仅当您控制源编码时) 如果源已使用 -force_key_frames 在每个请求的剪切边界重新编码,stream-copy 是准确的。工作流程: # 从 segments.json 构建逗号分隔的关键帧列表 KF=$(python3 -c "import json; s=json.load(open('segments.json')) ts=[] for seg in s['segments']: ts += [seg['start'], seg['end']] print(','.join(ts))") # 重新编码主视频一次,强制在所有段边界处设置关键帧