ワンクリックで
video-processing
Download, transcribe, analyze, and clip video content — vertical shorts, captions, thumbnails
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
Download, transcribe, analyze, and clip video content — vertical shorts, captions, thumbnails
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
This skill should be used when developing, debugging, refactoring, or building Genesis itself — tasks like "fix this in Genesis", "add a new MCP tool", "wire up the runtime", "Genesis won't start", "create a worktree", "debug the bridge", or "add a capability". Applies to any task modifying files under src/, .claude/, or tests/. Do NOT load for Genesis-as-tool work ("summarize this", "write a LinkedIn post", "research X") or general questions unrelated to Genesis internals.
Foundational voice authority and AI humanizer — writes content in the user's authentic voice with built-in AI detection, and supports stealth / anti- attribution writing (forum personas, anonymous posts, "write as not-me"). Use when asked to write/draft/generate content, invoke /voice, /write-as-me, or /humanize, run voice calibration, check "does this sound like me?", "make this sound human" / "de-AI this", "write a forum post as [persona]", or run AI detection ("does this sound like AI?", "check for AI patterns", "anti-slop check"). Do NOT use this skill for code, technical docs, or any output the user has not asked to be written in their voice — code styling defers to the separate code-voice skill.
Forward Deployed Engineer delivery contract for AWS engagements, build-first artifacts, grounded cost estimates, Well-Architected review, evolution roadmap
This skill should be used before answering "does Genesis have X", "does Genesis lack X", auditing Genesis capabilities, comparing Genesis to an external system, or reviewing/summarizing the architecture. It routes to the canonical judgment-layer subsystem map so audits start from the map, not from a cold grep. Also fires after changing a subsystem's capabilities, to keep the map current.
First-run onboarding — guides new users through Genesis setup on their first CC session. Configures user profile, essential API keys, Telegram, GitHub backup, and service verification. Triggered automatically when ~/.genesis/setup-complete is absent. Re-runnable by asking Genesis to "run setup" or "reconfigure [section]".
Apply when Genesis writes as itself — outreach, public content, community posts, emails, DMs. Not for writing in the user's voice (that's voice-master). Activate when Genesis is the author, not the ghostwriter.
| name | video-processing |
| description | Download, transcribe, analyze, and clip video content — vertical shorts, captions, thumbnails |
| consumer | cc_background_task |
| phase | 7 |
| skill_type | uplift |
Turn long-form video into processed outputs: transcripts, short clips, vertical format with captions, thumbnails. Uses FFmpeg, yt-dlp, and transcription services. All operations via shell commands.
Required tools (install if missing):
ffmpeg and ffprobe — video processingyt-dlp — video downloading from 1000+ sitesCheck availability:
which ffmpeg ffprobe yt-dlp 2>/dev/null
From URL:
yt-dlp --dump-json "URL" 2>/dev/null | python3 -c "
import sys, json
d = json.load(sys.stdin)
print(f'Title: {d[\"title\"]}')
print(f'Duration: {d[\"duration\"]}s')
print(f'Resolution: {d.get(\"width\",\"?\")}x{d.get(\"height\",\"?\")}')
"
From local file:
ffprobe -v quiet -print_format json -show_format -show_streams "file.mp4"
If duration > 2 hours, ask user to specify a segment range.
# Best quality up to 1080p with audio
yt-dlp -f "bv[height<=1080]+ba/b[height<=1080]" -o "source.mp4" "URL"
# Also grab auto-subtitles if available (avoids transcription entirely)
yt-dlp --write-auto-subs --sub-lang en --sub-format json3 \
--skip-download -o "source" "URL"
If source.en.json3 exists, skip to Phase 4 (transcription already done).
Priority order — use the first available:
curl -s https://api.groq.com/openai/v1/audio/transcriptions \
-H "Authorization: Bearer $API_KEY_GROQ" \
-F file=@audio.mp3 -F model=whisper-large-v3 \
-F response_format=verbose_json -F timestamp_granularities[]=word
whisper source.mp4 --model small --output_format json \
--output_dir . --language en
Extract audio first if sending to API:
ffmpeg -i source.mp4 -vn -acodec libmp3lame -q:a 2 audio.mp3
This is the core value step. Analyze the transcript and select 3-5 segments (30-90 seconds each) based on:
Selection criteria:
Rules:
For each selected segment:
Extract clip:
ffmpeg -ss [start] -to [end] -i source.mp4 \
-c:v libx264 -c:a aac -preset fast -crf 23 clip_N.mp4
Vertical crop (9:16 for shorts/reels):
# Center crop (loses sides)
ffmpeg -i clip_N.mp4 -vf "crop=ih*9/16:ih:(iw-ih*9/16)/2:0,scale=1080:1920" \
-c:a copy clip_N_vertical.mp4
# Letterbox (keeps everything, adds black bars)
ffmpeg -i clip_N.mp4 -vf "scale=1080:-2,pad=1080:1920:(ow-iw)/2:(oh-ih)/2" \
-c:a copy clip_N_vertical.mp4
Generate SRT captions from transcript:
Burn captions into video:
ffmpeg -i clip_N_vertical.mp4 \
-vf "subtitles=clip_N.srt:force_style='FontSize=22,FontName=Arial,\
PrimaryColour=&H00FFFFFF,OutlineColour=&H00000000,Outline=2,\
Shadow=1,MarginV=60,Alignment=2'" \
-c:a copy clip_N_captioned.mp4
Generate thumbnail:
# Frame at 2 seconds in
ffmpeg -ss 2 -i clip_N.mp4 -frames:v 1 -q:v 2 clip_N_thumb.jpg
# Video Processing Report
**Source:** [title or filename]
**Duration:** [total duration]
**Clips generated:** N
| # | Title | Duration | File | Size |
|---|-------|----------|------|------|
| 1 | [title] | [duration] | clip_1_captioned.mp4 | [size] |
## Segment Reasoning
1. **[title]** ([start]-[end]): [why this segment was selected]
If output exceeds platform limits, re-encode:
# Target ~45MB for Telegram (50MB limit)
ffmpeg -i input.mp4 -c:v libx264 -b:v 1500k -c:a aac -b:a 128k output.mp4
| Platform | Video Limit |
|---|---|
| Telegram | 50 MB |
| 16 MB | |
| Discord | 25 MB (Nitro: 500 MB) |
job_id: <CLIP-YYYY-MM-DD-NNN>
source: <URL or filepath>
source_duration: <seconds>
clips:
- number: <1-N>
title: <short title>
start: <HH:MM:SS>
end: <HH:MM:SS>
duration: <seconds>
file: <output filepath>
size_mb: <file size>
format: <horizontal | vertical>
captioned: <true | false>
virality_reasoning: <one sentence>
transcription_method: <youtube_auto | groq_whisper | openai_whisper | local_whisper | none>
docs/reference/gemini-routing.md — For video content analysis via Gemini API