video-transcribe
Video/audio transcription, visual frame analysis and summary. Download video from any URL (Twitter, YouTube, Bilibili, etc.), transcribe speech to text, extract keyframes for visual analysis, and summ
SKILL.mdplatforms/claude/skills/video-transcribe/SKILL.md
GitHubVideo Transcribe
Use this skill when the user asks to understand, transcribe, summarize, or visually analyze a video/audio source.
Mode Selection
- Full note / no omission: user says 全量、完整、不要看视频、替代看视频、图文笔记, or asks about completeness. Download the source, transcribe the whole audio, extract frames, and produce a coverage-checked note.
- Audio transcript: user explicitly asks for 字幕、转录、他说了什么、transcribe. Produce a timestamped transcript or transcript-backed summary.
- Visual analysis: user explicitly asks about 画面、截图、视觉、展示了什么. Extract frames and analyze visuals; skip Groq unless speech content matters.
- Quick summary: user only wants a brief answer. Summarize, but still state whether the result is transcript-backed, frame-backed, or both.
When intent is unclear, default to transcript + keyframes for short videos and ask before spending API quota on long videos.
Core Rules
- For long-form technical content, prefer Groq
whisper-large-v3withresponse_format=verbose_json; do not use plaintextwhen timestamps or completeness checks matter. - Do not force
language=zhfor non-Chinese videos. Use the detected language or set--language enfor English technical videos. - Use a terminology prompt for product/tool names such as
Codex,Remotion,Supabase,Typefully,TestFlight,Vercel,Claude Code. - Source timestamps are an outline, not proof. Verify every listed timestamp has transcript coverage before claiming the note can replace watching the video.
- Do not add a personal status tag like
已读; that belongs to the user, not the agent. - Keep full transcripts in the working directory unless the user asks to store them in the note. The published note should contain structured coverage, excerpts/paraphrase, screenshots, and validation notes.
Standard Workflow
- Create a work directory under
/tmp/video-transcribe/<slug>. - Download media with
scripts/download_media.sh. - Transcribe with
scripts/transcribe_groq.pywhen speech content is needed. - Extract frames with
scripts/extract_frames.shwhen visual context or screenshots are needed. - For Obsidian notes, read
references/obsidian-video-note.mdbefore writing. - Validate deliverables with
scripts/verify_obsidian_note.shand runtouch <note>after editing an Obsidian file externally.
Example:
WORK=/tmp/video-transcribe/codex-super-app
mkdir -p "$WORK"
SKILL_DIR="$HOME/.codex/skills/video-transcribe"
# In this repo, use: SKILL_DIR=platforms/codex/skills/video-transcribe
# In Claude runtime, use: SKILL_DIR="$HOME/.claude/skills/video-transcribe"
VIDEO=$("$SKILL_DIR/scripts/download_media.sh" "$URL" "$WORK" full)
"$SKILL_DIR/scripts/transcribe_groq.py" \
"$VIDEO" \
--work-dir "$WORK" \
--language en \
--prompt "Technical terms: Codex, Remotion, Supabase, Typefully, TestFlight, Vercel, Claude Code."
"$SKILL_DIR/scripts/extract_frames.sh" \
"$VIDEO" "$WORK/frames" --count 16
Output Standards
For a note intended to replace watching a video, use two layers:
- Readable layer: a short executive summary, key claims, reusable playbook, decisions, tools, gotchas, and screenshots.
- Coverage layer: collapsible timestamp groups or phase tables that map every source timestamp to the transcript-backed note.
Avoid a single flat list of dozens of timestamps. It is technically complete but hard to read.
Bundled Resources
scripts/download_media.sh: yt-dlp wrapper with cookie retry anduvx --from yt-dlpfallback.scripts/transcribe_groq.py: media-to-audio extraction, size-based segmentation, Groq transcription, and timestamp merge. Writestranscript.txt(one segment per line),transcript_segments.json, andtranscript_global.md.scripts/extract_frames.sh: uniform or timestamp-based keyframe extraction.scripts/verify_obsidian_note.sh: Markdown image/timestamp/frontmatter checks.references/obsidian-video-note.md: long-form Obsidian note structure and coverage standard.references/troubleshooting.md: common yt-dlp, Groq, ffmpeg, and note-validation failures.
Load reference files only when the current request needs that detail.