---
name: notque-video-transcript
description: "Extract video transcripts: yt-dlp subtitles to clean paragraphs."
license: "MIT"
metadata:
  decimalai-skill-id: "52703231-d3cc-41d7-a054-83505136a220"
  decimalai-version-id: "b2408b82-ebc5-4fad-a792-d8507c53935a"
  decimalai-version: "1"
  decimalai-body-sha256: "92acb141fa80238fa0476213476723f774a6ce560d00db613669891112525ecc"
  decimalai-name: "notque/video-transcript"
  decimalai-format: "1"
  decimalai-invocation: "model"
  decimalai-category: "research"
  decimalai-source: "https://app.decimal.ai/s/notque-video-transcript@1/SKILL.md"
---
# Video Transcript

Pull a video's transcript as readable paragraphs. Two paths, in order:

**Path 1 — uploader subtitles** (accurate, prefer when present):

```bash
yt-dlp --skip-download --write-subs --sub-langs en --sub-format vtt \
  -o '<work-dir>/%(id)s' '<URL>'
```

**Path 2 — auto-generated captions** (fallback when path 1 writes no file):

```bash
yt-dlp --skip-download --write-auto-subs --sub-langs en --sub-format vtt \
  -o '<work-dir>/%(id)s' '<URL>'
```

Then clean the VTT into paragraphs:

```bash
python3 skills/research/video-transcript/scripts/vtt_to_paragraph.py <work-dir>/<id>.en.vtt
```

Default output is plain paragraph text with `[Music]`-style cues stripped and the rolling duplicates of auto-captions deduplicated. Use `--timestamps` for `[mm:ss]` markers, `--keep-brackets` to keep cue tags, `-o FILE` to write to a file.

For other languages, change `--sub-langs` (e.g. `de`, `en.*`). List what a video offers with `yt-dlp --list-subs '<URL>'`.

## Error handling

### Both paths write no .vtt file
Cause: video has no subtitles or captions in the requested language.
Solution: run `yt-dlp --list-subs '<URL>'` and pick an available language; if none exist, report that and offer audio transcription via the `markdown-converter` skill on a downloaded audio file.

### HTTP 429 / "Sign in to confirm"
Cause: platform rate-limiting the host.
Solution: wait and retry with `--sleep-requests 2`; keep request volume low.

### Cleaner output repeats lines
Cause: VTT came from a third path (e.g. translated captions) with cue formats the dedupe misses.
Solution: rerun the cleaner; if repeats remain, file the sample VTT alongside a fix to `vtt_to_paragraph.py`.
