Skip to main content

yt-transcripts 🎼

A Python CLI tool for extracting transcripts from YouTube videos, playlists, and channels.

demo

Installation

pip install -e .

Or install dependencies directly:

pip install youtube-transcript-api yt-dlp

With AI Summarization

To enable AI-powered summarization:

pip install -e ".[summarize]"

Usage

yt-transcripts [OPTIONS] SOURCE...

Sources

The tool accepts multiple source types:

  • Video URL: https://www.youtube.com/watch?v=VIDEO_ID
  • Video ID: dQw4w9WgXcQ
  • Channel URL: https://www.youtube.com/@ChannelName
  • Playlist URL: https://www.youtube.com/playlist?list=PLAYLIST_ID

Options

Option Description
-f, --format Output format: text, json, srt, vtt (default: text)
-l, --language Preferred language code(s), can be specified multiple times (default: en)
-o, --output Output file or directory (default: stdout)
--max-videos Maximum number of videos to process from channel/playlist
--list-only Only list videos without extracting transcripts
-v, --verbose Verbose output
-h, --help Show help message
-s, --summarize Summarize transcripts using AI
--model LiteLLM model string (default: ollama/llama3.2)
--api-key API key for cloud providers
--ollama-host Ollama server URL (default: http://localhost:11434)

Examples

Single Video

# By URL
yt-transcripts "https://www.youtube.com/watch?v=dQw4w9WgXcQ"

# By video ID
yt-transcripts dQw4w9WgXcQ

Multiple Videos

yt-transcripts VIDEO_ID1 VIDEO_ID2 VIDEO_ID3

Output Formats

# Plain text (default)
yt-transcripts VIDEO_ID -f text

# JSON with timestamps and metadata
yt-transcripts VIDEO_ID -f json

# SRT subtitles
yt-transcripts VIDEO_ID -f srt

# WebVTT subtitles
yt-transcripts VIDEO_ID -f vtt

Save to File

# Single file
yt-transcripts VIDEO_ID -o transcript.txt

# Multiple videos to separate files in a directory
yt-transcripts VIDEO_ID1 VIDEO_ID2 -o ./transcripts/

Channels

# List all videos from a channel
yt-transcripts "https://www.youtube.com/@anthropic-ai" --list-only

# Extract transcripts from first 10 videos
yt-transcripts "https://www.youtube.com/@anthropic-ai" --max-videos 10

# Save channel transcripts to directory as JSON
yt-transcripts "https://www.youtube.com/@anthropic-ai" --max-videos 5 -f json -o ./transcripts/

Playlists

# List videos in a playlist
yt-transcripts "https://www.youtube.com/playlist?list=PLrAXtmErZgOeiKm4sgNOknGvNjby9efdf" --list-only

# Extract all transcripts from playlist
yt-transcripts "https://www.youtube.com/playlist?list=PLrAXtmErZgOeiKm4sgNOknGvNjby9efdf"

Language Selection

# Prefer Spanish, fall back to English
yt-transcripts VIDEO_ID -l es -l en

# Prefer French
yt-transcripts VIDEO_ID -l fr

AI Summarization

Summarize transcripts using LLMs. Supports Ollama (local), OpenAI, Anthropic, Gemini, and OpenRouter.

# Using local Ollama (default)
yt-transcripts -s VIDEO_ID

# Specify a model
yt-transcripts -s --model openai/gpt-4o-mini VIDEO_ID

# With API key
yt-transcripts -s --model anthropic/claude-sonnet-4-20250514 --api-key sk-ant-... VIDEO_ID

# Summarize multiple videos to a directory
yt-transcripts -s -o ./summaries/ VIDEO_ID1 VIDEO_ID2

# Summarize a playlist
yt-transcripts -s --max-videos 5 "https://www.youtube.com/playlist?list=PLAYLIST_ID"

Environment Variables

Variable Description Default
YT_SUMMARIZE_MODEL Default LiteLLM model ollama/llama3.2
OLLAMA_HOST Ollama server URL http://localhost:11434
OPENAI_API_KEY OpenAI API key -
ANTHROPIC_API_KEY Anthropic API key -
GEMINI_API_KEY Google Gemini API key -
OPENROUTER_API_KEY OpenRouter API key -

You can also use a .env file in your project directory.

Supported Models

  • Ollama (local): ollama/llama3.2, ollama/mistral, etc.
  • OpenAI: openai/gpt-4o, openai/gpt-4o-mini
  • Anthropic: anthropic/claude-sonnet-4-20250514, anthropic/claude-haiku
  • Gemini: gemini/gemini-1.5-flash, gemini/gemini-1.5-pro
  • OpenRouter: openrouter/meta-llama/llama-3-8b-instruct

Output Formats

Text

Plain text with all segments joined together:

We're no strangers to love You know the rules and so do I...

JSON

Structured data with metadata and timestamps:

{
  "video_id": "dQw4w9WgXcQ",
  "language": "en",
  "is_generated": false,
  "segments": [
    {
      "text": "We're no strangers to love",
      "start": 18.64,
      "duration": 3.24
    }
  ]
}

SRT

Standard subtitle format:

1
00:00:18,640 --> 00:00:21,880
We're no strangers to love

2
00:00:22,640 --> 00:00:26,960
You know the rules and so do I

VTT

WebVTT subtitle format:

WEBVTT

00:00:18.640 --> 00:00:21.880
We're no strangers to love

00:00:22.640 --> 00:00:26.960
You know the rules and so do I

Error Handling

The tool gracefully handles common errors:

  • Transcripts disabled: Reports when a video has transcripts turned off
  • Video unavailable: Reports when a video is private or deleted
  • No transcript found: Reports when no transcript exists in the requested language

Errors are included in the output rather than stopping execution, so batch processing continues even if some videos fail.

Dependencies

Core:

Summarization (optional):

License

MIT

Metadata

Release files for yt-transcripts 0.2.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for yt-transcripts 0.2.1
File Size Uploaded
yt_transcripts-0.2.1.tar.gz 10.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for yt-transcripts 0.2.1
File Interpreter ABI Platform
yt_transcripts-0.2.1-py3-none-any.whl Python 3 none any Details

Total release size: 22.0 kB

Release files / yt_transcripts-0.2.1.tar.gz

Download URL yt_transcripts-0.2.1.tar.gz
Size 10.9 kB
Tags Source
SHA-256 checksum
How to use checksums
b380176a97d4ed606f8caa68e3112a85e682a0c4051bed3068d1c8df4e9d4c40
BLAKE2b-256 checksum
How to use checksums
1b414c2f7872d4b5add186aa4db33a31ceeed7241f89f2890cbc7c23369217d3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Mar 25, 2026.

Transparency log

Release files / yt_transcripts-0.2.1-py3-none-any.whl

Download URL yt_transcripts-0.2.1-py3-none-any.whl
Size 11.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
1006577a30fc5fb1f33d798cfc05c9c127fe7a0e0ef18319005413e0eaea4584
BLAKE2b-256 checksum
How to use checksums
7187bb97cf10f5a538a14b536e2a03ffdf407aaac60d08a154543a4db1c0573e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Mar 25, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.2.1 This release

2 release files

0.2.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page