YouTube Transcript Fetcher (YTT)
YouTube Transcript Fetcher
Obtén transcripciones de cualquier video de YouTube usando la transcripción de Whisper AI. Busca en YouTube y obtén transcripciones de los mejores resultados. No se requiere clave API de YouTube.
Características
Impulsado por Whisper — Transcripción de IA de última generación, más del 99% de precisión
Búsqueda en YouTube — Busca en YouTube y obtén transcripciones de los mejores resultados
No se necesita clave API — Funciona sin credenciales de la API de datos de YouTube
Múltiples formatos — Salida en texto, JSON, SRT, VTT
Almacenamiento en caché — La caché respaldada por SQLite evita volver a transcribir
Sin límites de tasa — Whisper se ejecuta localmente, sin límites de API externos
CLI y biblioteca — Úsalo como herramienta de línea de comandos o módulo de Python
Servidor MCP — Intégralo con herramientas de IA a través del Protocolo de Contexto de Modelo (MCP)
Related MCP server: youtube-mcp
Instalación
# Clone the repository
git clone https://github.com/andrewctf/ytt.git
cd ytt
# Create virtual environment
python -m venv .venv
source .venv/bin/activate # Linux/Mac
.venv\Scripts\activate # Windows
# Install dependencies
pip install -r requirements.txt
# Optional: GPU support
pip install torch torchvision --index-url https://download.pytorch.org/whl/cu128Nota: Para una configuración detallada de GPU/CUDA, consulta QUICKSTART.md.
Configuración adicional para Whisper
Whisper requiere ffmpeg para la extracción de audio:
Windows (con winget):
winget install ffmpegmacOS:
brew install ffmpegLinux:
sudo apt install ffmpegInicio rápido
Para obtener instrucciones detalladas de instalación y configuración, consulta QUICKSTART.md.
CLI
# Get transcript (Whisper is used by default)
python cli.py transcript VIDEO_ID
# Or with a full YouTube URL
python cli.py transcript "https://www.youtube.com/watch?v=a1JTPFfshI0"
# Different output formats
python cli.py transcript VIDEO_ID --format json
python cli.py transcript VIDEO_ID --format srt
python cli.py transcript VIDEO_ID --format vtt
# Save to file
python cli.py transcript VIDEO_ID --output transcript.txt
# Batch processing
python cli.py transcript VIDEO_ID1 VIDEO_ID2 VIDEO_ID3
# Search YouTube for videos and get transcripts
python cli.py search "Python tutorial" --limit 5 --with-transcripts
# Search only (no transcripts)
python cli.py search "Python tutorial" --limit 10
# JSON output for search
python cli.py search "Python tutorial" --format json
# Cache management
python cli.py cache-stats
python cli.py cache-stats --clean # Remove expired entriesBiblioteca de Python
from src.service import get_transcript
from src.search_service import search, search_and_get_transcripts
# Basic usage
result = await get_transcript("VIDEO_ID")
print(result.content)
# With options
result = await get_transcript(
"VIDEO_ID",
language="en",
output_format="json",
use_cache=True,
)
# Access metadata
print(f"Source: {result.source}") # 'whisper' or 'innertube'
print(f"Language: {result.language}") # Detected language
print(f"Video ID: {result.video_id}")
# Search YouTube for videos
results = await search("Python tutorial", max_results=5)
for video in results:
print(f"{video.title} ({video.video_id}) - {video.channel_name}")
# Search and get transcripts for results
results = await search_and_get_transcripts("Python tutorial", max_results=3, language="en")
for video, transcript in results:
if transcript:
print(f"{video.title}: {transcript.content[:100]}...")Para uso síncrono:
import asyncio
from src.service import get_transcript
from src.search_service import search
def fetch_transcript(video_id):
return asyncio.run(get_transcript(video_id))
def search_videos(query, max_results=5):
return asyncio.run(search(query, max_results=max_results))
result = fetch_transcript("VIDEO_ID")
print(result.content)
videos = search_videos("Python tutorial")Servidor MCP
Nota: Consulta QUICKSTART.md para obtener una configuración detallada con Claude Desktop, Cursor y VS Code.
Inicia el servidor MCP:
python -m mcp_server.serverEl servidor expone tres herramientas:
get_transcript- Obtener transcripción para un solo videoget_transcripts_batch- Obtener transcripciones para múltiples videos simultáneamentesearch_videos- Buscar videos en YouTube que coincidan con una consulta
O intégralo con Claude Desktop añadiéndolo a tu configuración de MCP:
{
"mcpServers": {
"yt-transcript": {
"command": "python",
"args": ["-m", "mcp_server.server"],
"cwd": "/absolute/path/to/ytt"
}
}
}Cómo funciona
Video ID → Cache Check
↓ found?
Return Cached
↓ not found
Whisper (primary)
- Download audio via yt-dlp
- Transcribe with faster-whisper
- Returns word-level timestamps
↓ fails?
Innertube API (fallback)
- Extract API key from video page
- Fetch caption tracks
- Parse JSON3 timed text
↓
Cache Result
↓
Format & ReturnWhisper (Principal)
Descarga audio usando
yt-dlpTranscribe usando
faster-whisper(optimizado para CPU)Devuelve marcas de tiempo a nivel de palabra y texto de segmento
Funciona en cualquier video con audio
Velocidad de procesamiento de ~1-3x en tiempo real
API de Innertube (Respaldo)
Extrae datos de la API interna de YouTube
No se requiere clave API
Rápido (~0.5-2s por video)
~85% de cobertura (algunos videos carecen de subtítulos)
Límite de tasa (~5 solicitudes/10s por IP)
Formatos de salida
Texto (predeterminado)
Good morning, here we are, a live suturing course like nobody else has ever
done and what are we covering, we're covering every suturing technique...JSON
{
"video_id": "a1JTPFfshI0",
"language": "en",
"source": "whisper",
"segments": [
{"start": 0.0, "end": 4.5, "text": "Good morning, here we are..."},
{"start": 4.5, "end": 9.2, "text": "a live suturing course..."}
]
}SRT (SubRip)
1
00:00:00,000 --> 00:00:04,500
Good morning, here we are, a live suturing course...
2
00:00:04,500 --> 00:00:09,200
a live suturing course like nobody else...VTT (WebVTT)
WEBVTT
00:00:00.000 --> 00:00:04.500
Good morning, here we are, a live suturing course...
00:00:04.500 --> 00:00:09.200
a live suturing course like nobody else...Configuración
Edita config.py para personalizar el comportamiento:
class Config:
# Whisper settings
WHISPER_MODEL = "base" # tiny/base/small/medium/large
WHISPER_FALLBACK_ENABLED = True
# Cache settings
CACHE_TTL_DAYS = 7
CACHE_DB_PATH = ".transcript_cache.db"
# Rate limiting (for Innertube fallback)
RATE_LIMIT_RATE = 0.5 # tokens per second
RATE_LIMIT_BURST = 5 # max bucket size
# Batch processing
MAX_BATCH_SIZE = 50Modelos de Whisper
Modelo | Velocidad | Precisión | Memoria |
tiny | 10x | ~75% | ~1GB |
base | 7x | ~85% | ~1GB |
small | 4x | ~90% | ~2GB |
medium | 2x | ~95% | ~5GB |
large | 1x | ~97% | ~6GB |
Se recomienda el modelo base para la mayoría de los casos de uso: rápido y lo suficientemente preciso.
Estructura de archivos
ytt/
├── src/
│ ├── __init__.py
│ ├── fetcher.py # Innertube API client
│ ├── whisper_runner.py # Whisper transcription
│ ├── parser.py # Caption parsing utilities
│ ├── formatters.py # Output formatters
│ ├── cache.py # SQLite cache
│ ├── rate_limiter.py # Token bucket
│ ├── service.py # Orchestrator
│ ├── searcher.py # YouTube search
│ ├── search_cache.py # Search result cache
│ ├── search_service.py # Search orchestrator
│ ├── cuda_dll_manager.py # Auto-download CUDA libraries
│ └── exceptions.py # Custom exceptions
├── mcp_server/
│ ├── __init__.py
│ └── server.py # FastMCP server
├── cli.py # CLI entrypoint
├── main.py # Library entrypoint
├── config.py # Configuration
├── requirements.txt # Core dependencies
├── requirements-mcp.txt # MCP dependencies
├── README.md
└── QUICKSTART.mdSolución de problemas
"No module named 'rich'"
Instala las dependencias:
pip install -r requirements.txtWhisper falla con "ffmpeg not found"
Instala ffmpeg (consulta la sección de Instalación arriba).
Velocidad de transcripción lenta
Usa un modelo de Whisper más pequeño (
baseen lugar delarge)Usa aceleración por GPU cambiando
device="cpu"adevice="cuda"enwhisper_runner.pyHabilita la caché para evitar volver a transcribir
Límite de tasa de Innertube
El respaldo de Innertube tiene un límite de tasa por parte de YouTube (~5 solicitudes/10s). Usa Whisper como principal (predeterminado) para evitar esto. La caché también evita solicitudes redundantes.
La caché no funciona
Verifica las estadísticas de la caché:
python cli.py cache-statsLimpia las entradas caducadas:
python cli.py cache-stats --cleanDesarrollo
Ejecutar pruebas
pytestFormatear código
black src/
ruff check src/Licencia
Licencia MIT
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
No tool schema history has been recorded yet.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
An MCP server that gives any LLM or agent clean YouTube transcripts on demand: a single video, a whole channel, or a playlist, plus AI cleanup of auto-generated captions. API-key auth, credit-based, same backend as the public v1 API. Get a free API key with 25 free credits at youtubetranscriptdownload.com/account.
An MCP server that provides tools to discover and retrieve podcast episodes transcripts.
MCP server for RiverScript, an AI transcription platform - fetches transcripts shared via a link.
An MCP server that provides congressional transcripts
Related MCP Servers
- AlicenseAqualityDmaintenanceAn MCP server that enables users to retrieve YouTube transcripts and perform video or channel searches without requiring Google API keys. It supports transcript chunking and provides tools for detailed video content analysis and channel metadata extraction.5584MIT
- AlicenseAqualityCmaintenanceAn MCP server that enables the extraction of transcripts and detailed metadata from YouTube videos. It allows users to retrieve video information like titles and descriptions, as well as transcripts with optional timestamps and language selection.2MIT
- AlicenseBqualityDmaintenanceAn MCP server designed to fetch transcripts for YouTube videos. It enables AI tools to access video text content for tasks like summarization, analysis, and key takeaway extraction.173MIT
- FlicenseNot gradedqualityDmaintenanceThis MCP server fetches and extracts transcripts from YouTube videos, enabling AI language models to access and analyze video content.1-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/AndrewCTF/YTT'
If you have feedback or need assistance with the MCP directory API, please join our Discord server