Skills Plugins MCP Prompt Model 博客 我的中心

get-y2b-clips

Extract the most meaningful, engaging clips from YouTube videos. Use when user provides a YouTube URL and wants to find highlights, best moments, controversial takes, or valuable segments. Supports specifying number of clips or topic focus.

DeepseekModel 官方收录技能 质量 良好 · 64 v1.0.0

获取

https://deepseekmodel.com/api/download.php?id=didierrlopes-get-y2b-clips-claude-skills-get-y2b-clips-skill-md&format=skill
下载 .skill 标准格式,含 system_prompt 与 model_config,导入任意 Agent 框架即可使用
.skill 文件中 system_prompt 字段的实际内容。
name get-y2b-clips description Extract the most meaningful, engaging clips from YouTube videos. Use when user provides a YouTube URL and wants to find highlights, best moments, controversial takes, or valuable segments. Supports specifying number of clips or topic focus. allowed-tools Bash,Read,Write,Glob YouTube Nuggets Extractor Extract the most valuable clips ("nuggets") from YouTube videos automatically. Analyzes transcripts to find high-value segments based on controversy, insightful analysis, or user-specified topics. When to Use This Skill Activate when the user: Wants to extract "best clips", "highlights", or "nuggets" from a YouTube video Asks to find "interesting moments" or "valuable segments" Wants controversial takes, insights, or specific topics from a video Provides a YouTube URL and mentions clips, segments, or highlights Dependencies Check ALWAYS check dependencies first: # Check for yt-dlp command -v yt-dlp || echo "MISSING: yt-dlp" # Check for ffmpeg command -v ffmpeg || echo "MISSING: ffmpeg" Install Missing Dependencies yt-dlp: # macOS brew install yt-dlp # Linux sudo apt update && sudo apt install -y yt-dlp # pip (universal) pip3 install yt-dlp ffmpeg: # macOS brew install ffmpeg # Linux sudo apt update && sudo apt install -y ffmpeg Input Requirements Required : YouTube URL Optional (ask user if not specified for long videos >30 min): Number of clips (default: 3-5 based on video length) Topic focus keywords Min/max clip duration (default: 30s-180s) Available Python Scripts The skill includes helper scripts in the .claude/skills/get-y2b-clips/ directory: Script Purpose parse_vtt.py Parse VTT subtitles into segments.json (cleans HTML entities) extract_transcript.py Extract transcript with auto sentence boundary detection download_clip.py Download video clip with retry logic and progress reporting burn_subtitles.py Generate subtitled video with hardcoded captions utils.py Shared utilities for timestamp parsing Transcript Curation (CRITICAL) Auto-generated YouTube captions lack punctuation. The transcript must be manually curated to ensure: Complete starting sentence : Must begin with a coherent thought, not mid-sentence Complete ending sentence : Must end with a complete thought, not cut off Proper formatting : Sentences on separate lines with blank lines between Punctuation added : Add periods, commas, question marks as needed Workflow: Transcript → Video (Not the reverse!) 1. Identify target timestamps (where the insight is) 2. Run extract_transcript.py to get raw extraction + suggested video timestamps 3. MANUALLY CURATE the transcript: - Ensure first sentence is complete (may need to trim start) - Ensure last sentence is complete (may need to extend/trim end) - Add punctuation and formatting - Split into readable paragraphs 4. Use the VIDEO_START and VIDEO_END from script output - Video should start ~2s BEFORE first word of transcript - Video should end ~2s AFTER last word of transcript 5. Download video using those curated timestamps Example Curation: Raw extraction (bad): Successful why do you think we're learned and it turns out that many or most of the people in The Venture business... Curated (good): It turns out that many or most of the people in the venture business historically would answer that question by telling you they finance the best and brightest, the greatest managers. We do not. We have always focused on the market - the size of the market, the dynamics of the market, the nature of the competition. Because our objective always was to build big companies. If you don't attack a big market, it's highly unlikely you're ever going to build a big company. Using extract_transcript.py # Run the script to get raw extraction and video timestamps python3 extract_transcript.py \ --start 00:04:00 \ # Target start (where insight begins) --end 00:05:08 \ # Target end (where insight ends) --title "Clip Title" \ -- source "Video Title" \ --output "clip_folder/Transcript.txt" \ --json # Also outputs JSON with timestamps # Output will show: # VIDEO_START=00:03:58 <- Use this for video download # VIDEO_END=00:05:10 <- Use this for video download Then manually edit the Transcript.txt file to curate the text before downloading the video. Console Progress Reporting IMPORTANT : Provide clear progress updates to the user at each stage: [SETUP] Fetching video info... ✓ Video: "Title Here" (32 min) ✓ Output: ./clips/2024-01-01_12-00-00_video-slug/ [TRANSCRIPT] Downloading subtitles... ✓ Auto-generated English subtitles found ✓ Parsed 912 segments [ANALYSIS] Identifying best clips... ✓ Found 5 high-value segments ✓ Selected top 2 clips [CLIP 1/2] "Factory is the Weapon" (08:56 - 10:31) ✓ metadata.json created ✓ Transcript.txt extracted (321 words) ✓ Video.mp4 downloaded (14.1 MB) ✓ Subtitled.mp4 created (13.8 MB) [CLIP 2/2] "Peter Thiel Always Right" (29:59 - 31:17) ✓ metadata.json created ✓ Transcript.txt extracted (307 words) ⚠ Download failed (403), retrying... ✓ Video.mp4 downloaded (10.4 MB) ✓ Subtitled.mp4 created (10.1 MB) [DONE] Extracted 2 clips (2m53s total) Retry Logic for Downloads YouTube occasionally returns 403 errors. Always implement retry logic: # Use the download_clip.py script with built-in retries python3 .claude/skills/get-y2b-clips/download_clip.py \ --url "$VIDEO_URL" \ --start "00:08:56" \ --end "00:10:31" \ --output "$CLIP_DIR/Video.mp4" \ --retries 3 Or implement inline: import time import subprocess def download_with_retry ( cmd, max_retries= 3 , delay= 2 ): for attempt in range (max_retries): result = subprocess.run(cmd) if result.returncode == 0 : return True print ( f" ⚠ Retry {attempt + 1 } / {max_retries} ..." ) time.sleep(delay) return False Complete Workflow CRITICAL: The order of operations is WHY → TRANSCRIPT → VIDEO The "Why" justifies the selection, the transcript defines the EXACT timestamps, and the video is downloaded to match those exact timestamps. Phase 1: Setup # Get video info VIDEO_URL= "USER_PROVIDED_URL" VIDEO_TITLE=$(yt-dlp -- print "%(title)s" " $VIDEO_URL " | tr '/:?*"<>|\\' '-' ) VIDEO_DURATION=$(yt-dlp -- print "%(duration)s" " $VIDEO_URL " ) VIDEO_ID=$(yt-dlp -- print "%(id)s" " $VIDEO_URL " ) echo "Video: $VIDEO_TITLE " echo "Duration: $((VIDEO_DURATION / 60) ) minutes" # Create output folder TIMESTAMP=$( date + "%Y-%m-%d_%H-%M-%S" ) SLUG=$( echo " $VIDEO_TITLE " | tr '[:upper:]' '[:lower:]' | tr ' ' '-' | cut -c1-50) OUTPUT_DIR= "./clips/ ${TIMESTAMP} _ ${SLUG} " mkdir -p " $OUTPUT_DIR " echo "Output folder: $OUTPUT_DIR " Phase 2: Get Transcript with Exact Timestamps Priority order: Manual subtitles → Auto-generated → Whisper cd " $OUTPUT_DIR " # Check available subtitles yt-dlp --list-subs " $VIDEO_URL " # Try manual subtitles first if yt-dlp --write-sub --sub-langs "en" --skip-download -o "transcript" " $VIDEO_URL " 2>/dev/null; then echo "Manual subtitles downloaded" elif yt-dlp --write-auto-sub --sub-langs "en" --skip-download -o "transcript" " $VIDEO_URL " 2>/dev/null; then echo "Auto-generated subtitles downloaded" else echo "No subtitles available - Whisper transcription required" # Ask user before proceeding with Whisper (downloads audio) fi Parse VTT using the skill's Python script: # Parse VTT file into segments.json and full_transcript.txt python3 .claude/skills/get-y2b-clips/parse_vtt.py transcript.en.vtt # This creates: # - segments.json (for precise timestamp lookup) # - full_transcript.txt (for reading/analysis) Alternative inline Python (if script not available): import re import json def parse_vtt ( filename ): with open (filename, 'r' , encoding= 'utf-8' ) as f: content = f.read() lines = content.split( '\n' ) segments = [] current_start = None current_end = None seen_text = set () for line in lines: line = line.strip() # Check if this is a timestamp line time_match = re. match ( r'^(\d{2}:\d{2}:\d{2})\.(\d{3}) --> (\d{2}:\d{2}:\d{2})\.(\d{3})' , line) if time_match: current_start = f" {time_match.group( 1 )} . {time_match.group( 2 )} " current_end = f" {time_match.group( 3 )} . {time_match.group( 4 )} " continue # Skip metadata and empty lines if not line or line.startswith( 'WEBVTT' ) or line.startswith( 'Kind:' ) or line.startswith( 'Language:' ): continue # Skip lines with tags (word-by-word breakdowns) if '<' in line: continue # This is a clean text line text = line.strip() if text and text not in seen_text and current_start: seen_text.add(text) segments.append({ 'start' : current_start, 'end' : current_end, 'text' : text }) return segments segments = parse_vtt( "transcript.en.vtt" ) # Write full transcript with timestamps with open ( 'full_transcript.txt' , 'w' ) as f: for seg in segments: f.write( f"[ {seg[ 'start' ]} ] {seg[ 'text' ]} \n" ) # Write segments JSON for precise timestamp lookup with open ( 'segments.json' , 'w' ) as f: json.dump(segments, f, indent= 2 ) print ( f"Parsed { len (segments)} segments with exact timestamps" ) Phase 3: Analyze Content & Generate "Why" FIRST This is the critical phase - identify segments and justify selection BEFORE extracting. Read full_transcript.txt and analyze using these scoring criteria: Controversy Signals (weight: 0.30) "I disagree", "controversial", "unpopular opinion" Strong language: "absolutely", "never", "always" Debate markers: "push back", "challenge that" Insight Signals (weight: 0.35) Statistics, data points, percentages Predictions: "will happen", "in X years" Frameworks: "the way I see it", "my model" Expert knowledge, technical depth Engagement Signals (weight: 0.20) Rhetorical questions Stories: "let me tell you", "for example" Emotional peaks, emphasis Direct address: "think about it" Topic Match (weight: 0.15, or 0.40 if user specified topics) Keyword presence Semantic relevance Analysis output - use EXACT timestamps from transcript: For each identified clip, record: Title : Short descriptive name Start timestamp : EXACT timestamp from first line of segment (from segments.json) End timestamp : EXACT timestamp from last line of segment (from segments.json) Why : Full justification with scores IMPORTANT : The start and end times MUST come from the transcript timestamps. Do not approximate or round. The video will be cut to match these exact times. Phase 4: For Each Clip - Create Files in Order Order: metadata.json → Transcript.txt → Video.mp4 → Subtitled.mp4 Step 1: Create metadata.json (combines "why" + transcript info) import json clip_metadata = { "title" : "Clip Title" , "source_video" : "Video Title" , "video_start" : "00:12:06.000" , "video_end" : "00:14:05.000" , "duration_seconds" : 119 , "word_count" : 321 , "transcript" : "Full transcript text with proper formatting..." , "selection_rationale" : { "controversy" : { "score" : 8 , "reason" : "Explanation of controversy signals found" }, "insight" : { "score" : 9 , "reason" : "Key insights delivered" }, "engagement" : { "score" : 7 , "reason" : "Engagement signals found" }, "relevance" : { "score" : 8 , "reason" : "How it relates to the main topic" } }, "actionable_takeaway" : "What viewers/investors should do with this information" } with open ( 'Clip Title metadata.json' , 'w' ) as f: json.dump(clip_metadata, f, indent= 2 ) Step 2: Create Transcript.txt (human-readable version) Extract transcript text with a 5-second buffer before and after the video timestamps. This ensures all spoken words in the video clip are captured in the transcript (accounting for keyframe cuts). Key rules: Clean text only - no timestamps in the output 5-second buffer - transcript covers slightly more than the video Proper formatting - capitalize first letter of sentences, new line for each sentence Readable flow - sentences separated by blank lines for easy reading Formatting the transcript: Join all segment text together Split on sentence boundaries (. ! ?) Capitalize first letter of each sentence Write each sentence on its own line with blank line between import json import re # Load segments
Agent 识别该技能的关键词,点击任意一个即可复制。

该技能未提供触发词。

下载的 .skill 包内含以下字段。
字段 说明
format格式标识(skill/v1)
skill_id技能唯一 ID
name技能名称
version版本号
description技能描述
category所属分类(数组)
trigger_words触发词列表
tags标签列表
source来源标识
source_url来源链接(本页地址)
exported_at导出时间(每次下载生成)
system_prompt系统提示词正文
model_config模型参数:provider / model / temperature / max_tokens / top_p
examples示例
install_guide各平台导入说明(Coze / Dify / Claude / 自定义框架)
同一份技能可按不同平台格式导出。
.skill 标准格式,含 system_prompt 与 model_config,导入任意 Agent 框架即可使用 下载
.skillpro 增强格式,额外含脚本 / 工具 / 依赖 / 钩子占位 下载
.json 纯 JSON 导出,只含 system_prompt 与模型参数 下载
Coze 带 frontmatter 的 Markdown,Coze 平台导入用 下载
Dify Dify DSL,创建应用后直接导入 下载

每日精选 Skill 推荐,免费送到你邮箱

输入邮箱,每天接收一个精选 AI Agent 技能推荐。完全免费,持续更新。

验证码 --

提交后我们会发送一封确认邮件,点击邮件里的链接才会开始收信。

完全免费,取消任意时间。我们不会发送垃圾邮件。