npx skills add https://github.com/aj47/agent-skills --skill clipper分析视频转录文件,识别最有趣且值得剪辑的片段,并提供精确的时间戳。
关键特性:叙事完整性 此技能采用双通道系统,确保剪辑讲述完整的故事,而非孤立的瞬间。查看 NARRATIVE_TEMPLATES.md 了解故事弧模板。
用户只需在其目录中提供转录 JSON 和视频文件。当他们要求您分析或查找剪辑时,您将自动处理一切:
User: "Find interesting clips from my video"
您将自动执行以下操作:
out.json 或 *.json)parsed.json 是否存在,如果不存在,则运行解析脚本parsed.json 以查找值得剪辑的瞬间 → segments.json广告位招租
在这里展示您的产品或服务
触达数万 AI 开发者,精准高效
validation_report.json当用户要求查找剪辑时,请严格按照此顺序执行:
A. 检测文件
parsed.json 是否存在out.json,然后检查 *.json)segments.json 和其他分析文件不是转录文件B. 解析(如果需要)
parsed.json 不存在,运行:python .claude/skills/clipper/scripts/parse_transcription.py <transcription> > parsed.jsonparsed.json 是否成功创建C. 通道 1:信号检测
parsed.json(每次 100-200 个句子)segments.jsonD. 通道 2:叙事验证(新增)
validation_report.jsonsegments.json 中E. 提取(自动)
*.mp4、*.mov、*.mkv)python .claude/skills/clipper/scripts/extract_clips.py segments.json <transcription> <video> clips/F. 清理(自动)
python .claude/skills/clipper/scripts/cleanup_clips.py segments.json <transcription> <video> clips/clips/cleaned/当用户要求您查找剪辑时,首先检查 parsed.json 是否存在。如果不存在,自动运行:
python .claude/skills/clipper/scripts/parse_transcription.py <transcription_file> > parsed.json
如何检测转录文件:
out.jsonsentences 数组的 *.json 文件输入格式:包含 sentences 数组的 JSON,数组包含:
text:句子内容start:开始时间戳(秒)end:结束时间戳(秒)words:单词级时间戳数组输出格式:带有时间戳的简化 JSON 句子数组
您(Claude)将直接分析解析后的转录。遵循此过程:
创建一个名为 segments.json 的文件,结构如下:
{
"total_clips": 148,
"clips": [
{
"start_index": 3,
"end_index": 5,
"start_time": 18.80,
"end_time": 26.08,
"duration": 7.28,
"text": "Oh my god, that's incredible. Didn't know I could stream like that.",
"reason": "High-energy reaction to discovering new streaming capability - genuine surprise moment",
"category": "reaction",
"topic": "tiktok_streaming",
"subtopic": "vertical_discovery",
"keywords": ["tiktok", "streaming", "vertical", "discovery"],
"confidence": 0.92,
"suggested_title": "TikTok Vertical Streaming Discovery",
"key_quote": "Oh my god, that's incredible.",
"first_sentence": "Oh my god, that's incredible.",
"last_sentence": "Didn't know I could stream like that.",
"total_sentences": 3,
"context_expansion": {
"sentences_added_before": 0,
"sentences_added_after": 0,
"reason": "Segment was self-contained from initial identification"
},
"coherence_validated": true,
"narrative": {
"beat_type": "RESOLUTION",
"arc_id": "arc_003",
"arc_role": "Conclusion of discovery arc",
"linked_claims": [],
"is_orphan": false
}
},
{
"start_index": 152,
"end_index": 189,
"start_time": 375.0,
"end_time": 512.8,
"duration": 137.8,
"text": "Let me prove it. I'm going to build this with just a skill...",
"reason": "DEMO: Live demonstration proving skills can replace MCPs - core evidence for stream thesis",
"category": "teaching",
"topic": "skills_vs_mcps",
"subtopic": "demo_proof",
"keywords": ["skills", "mcp", "demo", "proof", "building"],
"confidence": 0.95,
"suggested_title": "Building a Skill to Replace MCPs - Live Demo",
"key_quote": "Let me prove it.",
"first_sentence": "Let me prove it.",
"last_sentence": "And there we go, it's working.",
"total_sentences": 38,
"narrative": {
"beat_type": "EVIDENCE",
"arc_id": "arc_001",
"arc_role": "Demo proving the thesis claim",
"linked_claims": ["clip_023"],
"is_orphan": false,
"demo_score_boost": 15
}
}
],
"story_arcs": [
{
"id": "arc_001",
"template": "ARGUMENT",
"title": "Skills Can Replace MCPs - Complete Proof",
"completeness_score": 1.0,
"status": "COMPLETE",
"beats": [
{
"type": "CLAIM",
"clip_index": 23,
"start_time": 342.5,
"end_time": 358.2,
"confidence": 0.95
},
{
"type": "EVIDENCE",
"clip_index": 45,
"start_time": 375.0,
"end_time": 512.8,
"confidence": 0.92
},
{
"type": "RESOLUTION",
"clip_index": 67,
"start_time": 525.0,
"end_time": 538.5,
"confidence": 0.94
}
],
"total_duration": 196.0,
"required_beats_found": 3,
"required_beats_total": 3,
"optional_beats_found": ["STAKES"]
}
],
"compilations": [
{
"id": "comp_auth",
"title": "Complete Authentication Implementation",
"topic": "authentication",
"subtopics": ["oauth_setup", "token_config", "testing"],
"segment_indices": [5, 12, 34, 67, 89],
"total_segments": 5,
"talking_duration": 312.5,
"time_span": 3600.0,
"created_automatically": true
}
],
"orphan_beats": [
{
"type": "CLAIM",
"clip_index": 78,
"text": "I think Cursor is overrated...",
"note": "Found CLAIM but no EVIDENCE or RESOLUTION detected within 5 minutes"
}
],
"metadata": {
"total_sentences_analyzed": 4400,
"total_duration": 24165.0,
"min_clip_length": 30,
"max_clip_length": 180,
"confidence_threshold": 0.6,
"individual_clips": 148,
"compilations_created": 12,
"story_arcs_detected": 8,
"story_arcs_complete": 6,
"orphan_beats": 3,
"demo_clips_detected": 12,
"narrative_validation_run": true
}
}
分析转录时,识别符合以下标准的片段:
1. 高能量时刻(类别:"reaction")
2. 有价值的提示与建议(类别:"tip")
3. 教学时刻(类别:"teaching")
4. 问题与互动(类别:"question")
5. 幽默与娱乐(类别:"humor")
6. 故事与叙事(类别:"story")
7. 强烈观点(类别:"opinion")
每个片段必须:
验证:
在句子 N 处识别出有趣时刻后,为保持连贯性进行扩展:
步骤 1:检查第一个句子是否需要上下文
第一个句子是否:
→ 如果是:包含句子 N-1,然后重新检查 → 最大回溯:3 个句子
步骤 2:检查最后一个句子是否感觉完整
最后一个句子是否:
→ 如果是:包含句子 N+1,然后重新检查 → 最大前瞻:2 个句子
步骤 3:验证时长
对于每个片段,在包含前验证所有这些:
如果任何检查失败,扩展上下文或跳过该片段。
对于每个已识别的片段,提取分层主题和关键词:
1. 提取关键词(自动,无硬编码)
2. 确定主题(广泛类别)
3. 确定子主题(具体方面)
4. 示例主题层次结构
Segment text: "So I'm setting up OAuth for the authentication system using Google's API..."
Keywords: ["oauth", "authentication", "google", "api", "setup"]
Topic: "authentication"
Subtopic: "oauth_setup"
Segment text: "The Redis cache is throwing errors when I try to deploy to production..."
Keywords: ["redis", "cache", "errors", "deploy", "production"]
Topic: "redis"
Subtopic: "deployment_debugging"
由于解析后的转录可能很大,请使用重叠窗口分步分析:
获取总计数:读取 parsed.json 元数据查看总句子数
使用重叠窗口分析:使用 200 个句子的窗口,重叠 50 个句子
跟踪所有片段:保留所有已识别剪辑的列表,包含主题/子主题/关键词
去重片段:如果同一片段出现在多个窗口中
按主题分组:按主题字段组织片段
自动创建合集:对于每个有 2+ 个片段的主题
排序剪辑:最终 clips 数组按置信度分数排序(最高优先)
写入输出:创建 segments.json,包含:
分析转录时,对每个潜在剪辑遵循此过程:
1. 识别有趣时刻
2. 确定初始句子边界
3. 运行上下文扩展算法
4. 验证连贯性清单
5. 提取元数据
6. 创建片段条目
7. 最终验证
# User asks Claude:
"Find interesting clips from my video"
# Claude automatically:
# 1. Checks if parsed.json exists, creates it if needed
# 2. Reads parsed.json to understand structure (4400 sentences, 6.7 hours)
# 3. Analyzes in overlapping windows:
# - Window 1: Sentences 0-200
# - Window 2: Sentences 150-350
# - Window 3: Sentences 300-500
# - ... (continues to end)
# 4. For each segment: extracts keywords, determines topic/subtopic
# 5. Deduplicates segments found in multiple windows
# 6. Groups segments by topic
# 7. Auto-creates compilations for topics with 2+ segments
# 8. Writes segments.json with clips + compilations
# 9. Reports summary:
# "Found 148 clips across 12 topics. Created 12 compilations."
Analysis complete! Found 148 individual clips.
Topics detected:
• authentication (5 segments, 312s total) → Compilation created
• redis_setup (3 segments, 198s total) → Compilation created
• tiktok_api (4 segments, 256s total) → Compilation created
• mediapipe (6 segments, 445s total) → Compilation created
• frontend_debugging (2 segments, 128s total) → Compilation created
... (7 more topics)
Created 12 compilations automatically.
Output saved to segments.json
- 148 individual clips
- 12 topic compilations
Extracting clips...
初始片段检测后,运行叙事验证以确保完整的故事弧。
扫描转录以查找故事弧模式:
ARGUMENT 弧(声明 → 证据 → 解决):
TUTORIAL 弧(目标 → 步骤 → 结果):
DISCOVERY 弧(发现 → 探索 → 判断):
PROBLEM-SOLUTION 弧(问题 → 洞察 → 修复 → 确认):
有关详细检测模式,请参见 BEAT_PATTERNS.md。
在分析过程中应用以下评分提升:
| 内容类型 | 评分提升 |
|---|---|
| 完整演示(包含执行/结果) | +15 |
| 结果/成功时刻 | +8 |
| 发现/洞察时刻 | +6 |
| 无演示的口头声明 | +4 |
| 上下文/铺垫 | +2 |
这确保演示优先于口头声明。
对于每个检测到的声明:
当出现以下情况时存在缺失部分:
缺失部分优先级评分:
生成 validation_report.json:
{
"validation_summary": {
"total_clips_pass1": 45,
"narrative_arcs_detected": 8,
"arcs_complete": 3,
"arcs_with_gaps": 5,
"gaps_detected": 12,
"high_priority_gaps": 3
},
"narrative_arcs": [
{
"id": "arc_001",
"type": "ARGUMENT",
"title": "Skills Can Replace MCPs",
"completeness_score": 0.33,
"status": "INCOMPLETE",
"beats": {
"CLAIM": {"found": true, "clip_id": "clip_023"},
"EVIDENCE": {"found": false, "expected_range": [1400, 2100]},
"RESOLUTION": {"found": true, "clip_id": "clip_045"}
},
"gaps": ["evidence_missing"]
}
],
"gaps": [
{
"id": "gap_001",
"priority": "HIGH",
"type": "missing_evidence",
"arc_id": "arc_001",
"timestamp_range": [1400.0, 2100.0],
"description": "Demo proving skills can replace MCPs",
"why_important": "Stream titled 'Skills vs MCPs' - the demo IS the content",
"suggested_clip": {
"start_time": 1400.0,
"end_time": 2100.0,
"suggested_title": "Building a Skill to Replace MCPs - Live Demo"
}
}
],
"orphan_claims": [
{
"clip_id": "clip_078",
"claim_text": "I think Cursor is overrated",
"note": "CLAIM found but no EVIDENCE detected within 5 minutes"
}
]
}
验证后,像这样展示缺失部分:
⚠️ 检测到叙事缺失部分
以下重要内容未被捕获为剪辑:
1. [高] "Skills vs MCPs Demo" (23:20 - 35:00)
您的论点声明和结论已被剪辑,但证明
论点的演示被遗漏了。这个 12 分钟的片段展示了实际
技能构建过程。
→ 建议:添加为剪辑 "Building a Skill to Replace MCPs - Live Demo"
2. [中] "Authentication Setup" (45:00 - 48:30)
剪辑 #12 显示了结果("It works!"),但显示
如何配置的设置过程缺失。
→ 建议:添加为剪辑 "OAuth Configuration Walkthrough"
接受建议吗?[Y/n/select]
当用户批准建议时:
segments.json分析后,审查 segments.json:
创建 segments.json 后,自动检测视频文件并运行:
python .claude/skills/clipper/scripts/extract_clips.py segments.json <original_transcription> <video_file> clips/
如何检测文件:
out.json)*.mp4、*.mov 或 *.mkv特性:
参数:
segments.json - 步骤 2 分析的输出out.json - 带有单词级数据的原始转录video.mp4 - 源视频文件clips/ - 输出目录(可选,默认为 "clips/")单个剪辑的工作原理:
合集的工作原理:
comp_auth_Complete_Authentication.mp4配置(编辑 extract_clips.py 进行调整):
SAFETY_BUFFER = 0.1 - 单词前后的缓冲(秒)MIN_CLIP_LENGTH = 60.0 - 最小总剪辑长度(1 分钟)MAX_CLIP_LENGTH = 360.0 - 最大总剪辑长度(6 分钟)输出:
001_Clip_Title.mp4、002_Another_Clip.mp4 等。comp_auth_Complete_Authentication.mp4、comp_redis_Redis_Setup.mp4 等。提取剪辑后,自动清理它们,移除填充词和静默:
python .claude/skills/clipper/scripts/cleanup_clips.py segments.json <original_transcription> <video_file> clips/
这是一个自动的后处理阶段:
特性:
工作原理:
clips/cleaned/ 目录配置(编辑 cleanup_clips.py 进行调整):
SAFETY_BUFFER = 0.1 - 剪切前后的缓冲(秒)SILENCE_THRESHOLD = 0.4 - 视为静默的最小间隙(秒)MIN_SEGMENT_LENGTH = 0.3 - 保留的最小片段长度(秒)FILLER_WORDS - 要移除的填充词集合输出:
clips/clips/cleaned/参见上面步骤 2 中的标准,或查看 SEGMENT_TYPES.md 了解每个类别的详细指导。
分析时可以调整这些参数:
Analyzes video transcription files to identify the most interesting and clip-worthy segments with precise timestamps.
Key Feature: Narrative Completeness This skill uses a two-pass system to ensure clips tell complete stories, not just isolated moments. See NARRATIVE_TEMPLATES.md for story arc templates.
User just needs the transcription JSON and video file in their directory. When they ask you to analyze or find clips, you handle everything automatically:
User: "Find interesting clips from my video"
You will automatically:
out.json or *.json)parsed.json exists, if not, run the parse scriptparsed.json for clip-worthy moments → segments.jsonvalidation_report.jsonWhen user asks to find clips, follow this exact sequence:
A. Detect Files
parsed.json existsout.json first, then *.json)segments.json and other analysis files are NOT transcription filesB. Parse (if needed)
parsed.json doesn't exist, run: python .claude/skills/clipper/scripts/parse_transcription.py <transcription> > parsed.jsonparsed.json was created successfullyC. Pass 1: Signal Detection
parsed.json in windows (100-200 sentences at a time)segments.jsonD. Pass 2: Narrative Validation (NEW)
validation_report.json with gaps and suggestionssegments.jsonE. Extract (automatic)
*.mp4, *.mov, *.mkv)python .claude/skills/clipper/scripts/extract_clips.py segments.json <transcription> <video> clips/F. Cleanup (automatic)
python .claude/skills/clipper/scripts/cleanup_clips.py segments.json <transcription> <video> clips/clips/cleaned/When a user asks you to find clips, FIRST check if parsed.json exists. If not, automatically run:
python .claude/skills/clipper/scripts/parse_transcription.py <transcription_file> > parsed.json
How to detect the transcription file:
out.json in current directory*.json file that contains a sentences arrayInput format : JSON with sentences array containing:
text: Sentence contentstart: Start timestamp (seconds)end: End timestamp (seconds)words: Array of word-level timestampsOutput format : Simplified JSON array of sentences with timestamps
YOU (Claude) will analyze the parsed transcription directly. Follow this process:
Create a file called segments.json with this structure:
{
"total_clips": 148,
"clips": [
{
"start_index": 3,
"end_index": 5,
"start_time": 18.80,
"end_time": 26.08,
"duration": 7.28,
"text": "Oh my god, that's incredible. Didn't know I could stream like that.",
"reason": "High-energy reaction to discovering new streaming capability - genuine surprise moment",
"category": "reaction",
"topic": "tiktok_streaming",
"subtopic": "vertical_discovery",
"keywords": ["tiktok", "streaming", "vertical", "discovery"],
"confidence": 0.92,
"suggested_title": "TikTok Vertical Streaming Discovery",
"key_quote": "Oh my god, that's incredible.",
"first_sentence": "Oh my god, that's incredible.",
"last_sentence": "Didn't know I could stream like that.",
"total_sentences": 3,
"context_expansion": {
"sentences_added_before": 0,
"sentences_added_after": 0,
"reason": "Segment was self-contained from initial identification"
},
"coherence_validated": true,
"narrative": {
"beat_type": "RESOLUTION",
"arc_id": "arc_003",
"arc_role": "Conclusion of discovery arc",
"linked_claims": [],
"is_orphan": false
}
},
{
"start_index": 152,
"end_index": 189,
"start_time": 375.0,
"end_time": 512.8,
"duration": 137.8,
"text": "Let me prove it. I'm going to build this with just a skill...",
"reason": "DEMO: Live demonstration proving skills can replace MCPs - core evidence for stream thesis",
"category": "teaching",
"topic": "skills_vs_mcps",
"subtopic": "demo_proof",
"keywords": ["skills", "mcp", "demo", "proof", "building"],
"confidence": 0.95,
"suggested_title": "Building a Skill to Replace MCPs - Live Demo",
"key_quote": "Let me prove it.",
"first_sentence": "Let me prove it.",
"last_sentence": "And there we go, it's working.",
"total_sentences": 38,
"narrative": {
"beat_type": "EVIDENCE",
"arc_id": "arc_001",
"arc_role": "Demo proving the thesis claim",
"linked_claims": ["clip_023"],
"is_orphan": false,
"demo_score_boost": 15
}
}
],
"story_arcs": [
{
"id": "arc_001",
"template": "ARGUMENT",
"title": "Skills Can Replace MCPs - Complete Proof",
"completeness_score": 1.0,
"status": "COMPLETE",
"beats": [
{
"type": "CLAIM",
"clip_index": 23,
"start_time": 342.5,
"end_time": 358.2,
"confidence": 0.95
},
{
"type": "EVIDENCE",
"clip_index": 45,
"start_time": 375.0,
"end_time": 512.8,
"confidence": 0.92
},
{
"type": "RESOLUTION",
"clip_index": 67,
"start_time": 525.0,
"end_time": 538.5,
"confidence": 0.94
}
],
"total_duration": 196.0,
"required_beats_found": 3,
"required_beats_total": 3,
"optional_beats_found": ["STAKES"]
}
],
"compilations": [
{
"id": "comp_auth",
"title": "Complete Authentication Implementation",
"topic": "authentication",
"subtopics": ["oauth_setup", "token_config", "testing"],
"segment_indices": [5, 12, 34, 67, 89],
"total_segments": 5,
"talking_duration": 312.5,
"time_span": 3600.0,
"created_automatically": true
}
],
"orphan_beats": [
{
"type": "CLAIM",
"clip_index": 78,
"text": "I think Cursor is overrated...",
"note": "Found CLAIM but no EVIDENCE or RESOLUTION detected within 5 minutes"
}
],
"metadata": {
"total_sentences_analyzed": 4400,
"total_duration": 24165.0,
"min_clip_length": 30,
"max_clip_length": 180,
"confidence_threshold": 0.6,
"individual_clips": 148,
"compilations_created": 12,
"story_arcs_detected": 8,
"story_arcs_complete": 6,
"orphan_beats": 3,
"demo_clips_detected": 12,
"narrative_validation_run": true
}
}
When analyzing the transcription, identify segments that match these criteria:
1. High-Energy Moments (category: "reaction")
2. Valuable Tips & Advice (category: "tip")
3. Teaching Moments (category: "teaching")
4. Questions & Engagement (category: "question")
5. Humor & Entertainment (category: "humor")
6. Stories & Narratives (category: "story")
7. Strong Opinions (category: "opinion")
EVERY segment MUST:
Validation:
After identifying an interesting moment at sentence N, expand for coherence:
Step 1: Check if first sentence needs context
Does the first sentence:
→ If YES : Include sentence N-1, then re-check → Maximum lookback : 3 sentences
Step 2: Check if last sentence feels complete
Does the last sentence:
→ If YES : Include sentence N+1, then re-check → Maximum lookahead : 2 sentences
Step 3: Verify duration
For EACH segment, verify all of these before including:
If any check fails, expand context or skip the segment.
For each identified segment, extract hierarchical topics and keywords:
1. Extract Keywords (Automatic, No Hard-Coding)
2. Determine Topic (Broad Category)
3. Determine Subtopic (Specific Aspect)
4. Example Topic Hierarchy
Segment text: "So I'm setting up OAuth for the authentication system using Google's API..."
Keywords: ["oauth", "authentication", "google", "api", "setup"]
Topic: "authentication"
Subtopic: "oauth_setup"
Segment text: "The Redis cache is throwing errors when I try to deploy to production..."
Keywords: ["redis", "cache", "errors", "deploy", "production"]
Topic: "redis"
Subtopic: "deployment_debugging"
Since the parsed transcription may be large, analyze it in steps with overlapping windows:
Get total count : Read the parsed.json metadata to see total sentences
Analyze in overlapping windows : Use 200-sentence windows with 50-sentence overlap
Track all segments : Keep a running list of all identified clips with topic/subtopic/keywords
Deduplicate segments : If same segment appears in multiple windows
Group by topic : Organize segments by their topic field
Create compilations automatically : For each topic with 2+ segments
When analyzing transcription, follow this process for EACH potential clip:
1. Identify Interesting Moment
2. Determine Initial Sentence Boundaries
3. Run Context Expansion Algorithm
4. Validate Coherence Checklist
5. Extract Metadata
6. Create Segment Entry
7. Final Validation
# User asks Claude:
"Find interesting clips from my video"
# Claude automatically:
# 1. Checks if parsed.json exists, creates it if needed
# 2. Reads parsed.json to understand structure (4400 sentences, 6.7 hours)
# 3. Analyzes in overlapping windows:
# - Window 1: Sentences 0-200
# - Window 2: Sentences 150-350
# - Window 3: Sentences 300-500
# - ... (continues to end)
# 4. For each segment: extracts keywords, determines topic/subtopic
# 5. Deduplicates segments found in multiple windows
# 6. Groups segments by topic
# 7. Auto-creates compilations for topics with 2+ segments
# 8. Writes segments.json with clips + compilations
# 9. Reports summary:
# "Found 148 clips across 12 topics. Created 12 compilations."
Analysis complete! Found 148 individual clips.
Topics detected:
• authentication (5 segments, 312s total) → Compilation created
• redis_setup (3 segments, 198s total) → Compilation created
• tiktok_api (4 segments, 256s total) → Compilation created
• mediapipe (6 segments, 445s total) → Compilation created
• frontend_debugging (2 segments, 128s total) → Compilation created
... (7 more topics)
Created 12 compilations automatically.
Output saved to segments.json
- 148 individual clips
- 12 topic compilations
Extracting clips...
After initial segment detection, run narrative validation to ensure complete story arcs.
Scan the transcript for story arc patterns:
ARGUMENT arcs (Claim → Evidence → Resolution):
TUTORIAL arcs (Goal → Steps → Result):
DISCOVERY arcs (Find → Explore → Verdict):
PROBLEM-SOLUTION arcs (Problem → Insight → Fix → Confirmation):
See BEAT_PATTERNS.md for detailed detection patterns.
Apply these scoring boosts during analysis:
| Content Type | Score Boost |
|---|---|
| Complete demo (with execution/results) | +15 |
| Result/success moment | +8 |
| Discovery/insight moment | +6 |
| Verbal claim without demo | +4 |
| Context/setup | +2 |
This ensures demos are prioritized over verbal claims.
For each detected claim:
A gap exists when:
Gap priority scoring:
Generate validation_report.json:
{
"validation_summary": {
"total_clips_pass1": 45,
"narrative_arcs_detected": 8,
"arcs_complete": 3,
"arcs_with_gaps": 5,
"gaps_detected": 12,
"high_priority_gaps": 3
},
"narrative_arcs": [
{
"id": "arc_001",
"type": "ARGUMENT",
"title": "Skills Can Replace MCPs",
"completeness_score": 0.33,
"status": "INCOMPLETE",
"beats": {
"CLAIM": {"found": true, "clip_id": "clip_023"},
"EVIDENCE": {"found": false, "expected_range": [1400, 2100]},
"RESOLUTION": {"found": true, "clip_id": "clip_045"}
},
"gaps": ["evidence_missing"]
}
],
"gaps": [
{
"id": "gap_001",
"priority": "HIGH",
"type": "missing_evidence",
"arc_id": "arc_001",
"timestamp_range": [1400.0, 2100.0],
"description": "Demo proving skills can replace MCPs",
"why_important": "Stream titled 'Skills vs MCPs' - the demo IS the content",
"suggested_clip": {
"start_time": 1400.0,
"end_time": 2100.0,
"suggested_title": "Building a Skill to Replace MCPs - Live Demo"
}
}
],
"orphan_claims": [
{
"clip_id": "clip_078",
"claim_text": "I think Cursor is overrated",
"note": "CLAIM found but no EVIDENCE detected within 5 minutes"
}
]
}
After validation, present gaps like this:
⚠️ NARRATIVE GAPS DETECTED
The following important content was NOT captured as clips:
1. [HIGH] "Skills vs MCPs Demo" (23:20 - 35:00)
Your thesis claim and conclusion were clipped, but the DEMO proving
the thesis was missed. This 12-minute segment shows the actual
skill being built.
→ Suggest: Add as clip "Building a Skill to Replace MCPs - Live Demo"
2. [MEDIUM] "Authentication Setup" (45:00 - 48:30)
Clip #12 shows the result ("It works!") but the setup showing
HOW it was configured is missing.
→ Suggest: Add as clip "OAuth Configuration Walkthrough"
Accept suggestions? [Y/n/select]
When user approves suggestions:
segments.jsonAfter analysis, review segments.json:
After creating segments.json, automatically detect the video file and run:
python .claude/skills/clipper/scripts/extract_clips.py segments.json <original_transcription> <video_file> clips/
How to detect files:
out.json)*.mp4, *.mov, or *.mkv in current directoryFeatures:
Arguments:
segments.json - Output from Step 2 analysisout.json - Original transcription with word-level datavideo.mp4 - Source video fileclips/ - Output directory (optional, defaults to "clips/")How it works for individual clips:
How it works for compilations:
comp_auth_Complete_Authentication.mp4Configuration (edit extract_clips.py to adjust):
SAFETY_BUFFER = 0.1 - Buffer before/after words (seconds)MIN_CLIP_LENGTH = 60.0 - Minimum total clip length (1 minute)MAX_CLIP_LENGTH = 360.0 - Maximum total clip length (6 minutes)Output:
001_Clip_Title.mp4, 002_Another_Clip.mp4, etc.comp_auth_Complete_Authentication.mp4, comp_redis_Redis_Setup.mp4, etc.After extracting clips, automatically clean them up by removing filler words and silences:
python .claude/skills/clipper/scripts/cleanup_clips.py segments.json <original_transcription> <video_file> clips/
This is an automatic post-processing phase:
Features:
How it works:
clips/cleaned/ directoryConfiguration (edit cleanup_clips.py to adjust):
SAFETY_BUFFER = 0.1 - Buffer before/after cuts (seconds)SILENCE_THRESHOLD = 0.4 - Min gap to consider silence (seconds)MIN_SEGMENT_LENGTH = 0.3 - Min segment length to keep (seconds)FILLER_WORDS - Set of filler words to removeOutput:
clips/clips/cleaned/See the criteria in Step 2 above, or review SEGMENT_TYPES.md for detailed guidance on each category.
You can adjust these parameters when analyzing:
Note: The extraction script enforces 60s minimum and 360s maximum to ensure clips have sufficient context.
See EXAMPLES.md for sample analyses and outputs.
brew install ffmpeg on macOS or apt-get install ffmpeg on Linux)"No segments found" : The content may be low-energy or monotone. Try lowering confidence threshold mentally to 0.5 or including shorter clips (down to 8 seconds).
"Too many segments" : Raise confidence threshold to 0.75+ or increase minimum length to 15-20 seconds.
Large files : For very long videos (4+ hours), analyze in smaller windows and take breaks to avoid context limits.
Weekly Installs
1
Repository
GitHub Stars
1
First Seen
Today
Security Audits
Gen Agent Trust HubPassSocketPassSnykPass
Installed on
amp1
cline1
openclaw1
opencode1
cursor1
kimi-cli1
AI Elements:基于shadcn/ui的AI原生应用组件库,快速构建对话界面
60,400 周安装
Sort clips : Final clips array sorted by confidence score (highest first)
Write output : Create segments.json with: