🎬 AI YouTube Shorts Generator: Alternativa Open Source a Opus Clip
RESUMEN EJECUTIVO
AI YouTube Shorts Generator (Anil-matcha/AI-Youtube-Shorts-Generator, licencia MIT) es una alternativa de código abierto a plataformas de pago como Opus Clip, Vidyo.ai, Klap, SubMagic y 2short.ai.
A partir de la URL de cualquier vídeo largo de YouTube (podcasts, entrevistas, conferencias, tutoriales) o un archivo de vídeo local, la herramienta:
- Transcribe con Whisper (local con
faster-whispero en la nube).- Analiza el contenido con un LLM (Gemini o GPT) mediante un framework de viralidad para puntuar y extraer los mejores fragmentos (hooks, opiniones polémicas, revelaciones).
- Recorta automáticamente a formato vertical 9:16 utilizando seguimiento de rostros (face tracking con OpenCV) y cortes con FFmpeg.
- Genera títulos atractivos, puntuación de viralidad (0–100), ganchos iniciales y exportación JSON para automatizaciones.
📋 Ficha Técnica y Comparativa de Licencia
| Parámetro | Detalle Técnico |
|---|---|
| Repositorio | Anil-matcha/AI-Youtube-Shorts-Generator (GitHub) |
| Licencia | MIT License (Uso comercial permitido, integrable en SaaS propios) |
| Lenguaje & Core | Python 3.10+ |
| Modo Local (Offline) | yt-dlp + faster-whisper (CPU/CUDA) + OpenCV (Face tracking) + FFmpeg |
| Modo API (Cloud Rápido) | MuAPI (/youtube-download, /openai-whisper, /autocrop) |
| Proveedores LLM | Google Gemini (gemini-2.5-flash) o OpenAI (gpt-4o-mini) |
| Aspect Ratios | 9:16 (TikTok/Shorts/Reels), 1:1 (Cuadrado), configurable |
| Coste por Clip | **30–$300/mes) |
⚖️ Cuadro Comparativo: Esta Herramienta vs. Servicios Comerciales (Opus Clip / Klap)
| Característica | 🎬 AI Shorts Generator (Este Repo) | 💎 Opus Clip / Vidyo.ai / Klap |
|---|---|---|
| Modelo de Precios | Gratis & Open Source (solo tokens de LLM si aplican) | Suscripciones de 300 / mes |
| Créditos por minuto | 🟢 Ilimitado (sin topes mensuales) | 🔴 Límites estrictos de minutos por mes |
| Marcas de agua | 🟢 Ninguna jamás | 🔴 En planes gratuitos / trial |
| Algoritmo de Viralidad | 🟢 100% editable en código Python (highlights.py) | 🔴 Caja negra propietaria |
| Procesamiento en Lote | 🟢 Nativo con xargs y listas de URLs | ⚠️ Subida manual una a una en web |
| Privacidad & Self-Hosted | 🟢 Corre en tu PC local o VPS propio | 🔴 Vídeos procesados y almacenados en sus servidores |
| Salida Programable | 🟢 JSON estructurado (--output-json) | ⚠️ Limitado o reservado a planes Enterprise |
🏗️ Flujo de Procesamiento y Arquitectura
flowchart TD In["🎥 Vídeo Largo de Entrada<br>(URL YouTube o archivo local .mp4)"] --> Splitter{"¿Modo API o Local?"} subgraph Modo Local ["🖥️ Modo Local (--mode local)"] DL_Local["📥 Descarga con yt-dlp<br>(con caché local source_ID.mp4)"] Whisper_Local["🎙️ Transcripción faster-whisper<br>(Caché .srt local, CPU/CUDA)"] Crop_Local["🎯 OpenCV Face Tracking + FFmpeg<br>(Enfoque dinámico al orador 9:16)"] end subgraph Modo API ["☁️ Modo API (--mode api)"] MuAPI["⚡ MuAPI Cloud Service<br>(Download, Whisper-1, Autocrop)"] end Splitter -->|--mode local| DL_Local DL_Local --> Whisper_Local Splitter -->|--mode api| MuAPI Whisper_Local --> Chunking["🧩 Segmentación Inteligente (>30 min)<br>(Ventanas solapadas para no perder clips)"] MuAPI --> Chunking Chunking --> LLM["🧠 Virality Engine (Gemini / GPT)<br>Evaluación de 8 pilares de enganche"] LLM --> Rank["📊 Ranking & Deduplicación<br>(Puntuación 0-100, eliminación de solapamientos)"] Rank --> Crop_Local Rank --> Render_API["☁️ Renderizado Nube MuAPI"] Crop_Local --> Output["🚀 Salida Final: Clips 9:16 MP4<br>+ Hook textual + Puntuación + JSON"] Render_API --> Output
🧠 El Framework de Viralidad (Virality Criteria)
El generador no corta aleatoriamente cuando hay silencio o picos de volumen. Analiza la transcripción semántica evaluando 8 factores psicológicos de retención:
- Hook de Apertura (0-3 seg): La primera frase debe provocar curiosidad inmediata o romper un patrón mental.
- Picos Emocionales: Momentos de euforia, enojo, risa o sorpresa genuina.
- Bombas de Opinión (Opinion Bombs): Posturas contrarias al consenso general que invitan al debate en la caja de comentarios.
- Momentos de Revelación (Aha! Moments): Datos o explicaciones que hacen clic en la cabeza del espectador.
- Conflicto / Tensión: Discusiones o contrastes marcados entre dos ideas o personas.
- Frases Altamente Citables (Quotable Lines): Sentencias cortas y memorables ideales para compartir.
- Pico de Historia (Story Climax): El desenlace emocionante de una anécdota.
- Valor Práctico Inmediato: Un consejo o truco aplicable de inmediato (Actionable takeaway).
🛠️ Instalación y Configuración en Linux Mint
1. Requisitos Previos
Asegúrate de tener instalados Python 3.10+, ffmpeg y herramientas de desarrollo:
sudo apt update
sudo apt install -y python3-venv python3-pip ffmpeg git2. Clonar el Repositorio
git clone https://github.com/Anil-matcha/AI-Youtube-Shorts-Generator.git ~/dev/AI-Youtube-Shorts-Generator
cd ~/dev/AI-Youtube-Shorts-Generator3. Crear el Entorno Virtual e Instalar Dependencias
python3 -m venv venv
source venv/bin/activate
# Dependencias básicas (Modo API)
pip install -r requirements.txt
# Dependencias completas para MODO LOCAL (yt-dlp, faster-whisper, opencv)
pip install -r requirements-local.txt4. Configurar Variables de Entorno (.env)
Crea un archivo .env en la raíz del proyecto:
# ==========================================
# MODO LOCAL (--mode local) - RECOMENDADO
# ==========================================
LLM_PROVIDER=gemini # 'gemini' o 'openai'
GEMINI_API_KEY=tu_gemini_api_key # Desde Google AI Studio (Gratis)
GEMINI_MODEL=gemini-2.5-flash # Rápido, económico y con 1M contexto
# Si prefieres OpenAI:
# LLM_PROVIDER=openai
# OPENAI_API_KEY=tu_openai_key
# OPENAI_MODEL=gpt-4o-mini
# Configuración de Whisper Local
LOCAL_WHISPER_MODEL=base # tiny, base, small, medium, large-v3
LOCAL_WHISPER_DEVICE=auto # auto, cpu, cuda
LOCAL_OUTPUT_DIR=output # Directorio de guardado de los clips
# ==========================================
# MODO API (--mode api) - Opcional
# ==========================================
# MUAPI_API_KEY=tu_muapi_key_aqui💻 Ejemplos de Uso Práctico
A. Extraer los 3 mejores Shorts de un vídeo de YouTube (Modo Local)
python main.py "https://www.youtube.com/watch?v=VIDEO_ID" --mode localLos vídeos generados se guardarán en ./output/short_01.mp4, short_02.mp4, etc.
B. Especificar cantidad de clips y exportar reporte JSON
python main.py "https://www.youtube.com/watch?v=VIDEO_ID" \
--mode local \
--num-clips 5 \
--aspect-ratio 9:16 \
--output-json ./output/reporte_clips.jsonC. Procesar un archivo de vídeo local (sin tocar YouTube)
Puedes pasar una ruta directa o una URI file://:
python main.py "/home/alexwce/Vídeos/podcast_entrevista.mp4" --mode local --num-clips 4D. Procesamiento en Lote (Batch Processing) con múltiples URLs
Crea un archivo urls.txt con un enlace de YouTube por línea:
https://www.youtube.com/watch?v=ID_1
https://www.youtube.com/watch?v=ID_2
https://www.youtube.com/watch?v=ID_3Y ejecútalo en paralelo o en secuencia con xargs:
xargs -a urls.txt -I{} python main.py "{}" --mode local --num-clips 3E. Uso como Librería en Python
Puedes integrar el generador en tus propios scripts o agentes:
from shorts_generator import generate_shorts
resultado = generate_shorts(
"/home/alexwce/Vídeos/charla_tecnica.mp4",
num_clips=3,
aspect_ratio="9:16",
mode="local"
)
for clip in resultado["shorts"]:
print(f"🔥 Score: {clip['score']} | Título: {clip['title']}")
print(f"🎣 Gancho: {clip['hook_sentence']}")
print(f"📁 Ruta: {clip['clip_url']}")📊 Salida de Consola y Formato JSON
La consola muestra un resumen estructurado de cada clip detectado:
========================================================================
Highlights: 8 candidatos analizados → Conservados los mejores 3
========================================================================
#1 Score=94 [02:15 → 03:05]
Título: El error de $50,000 en mi primera startup
Hook: "Nadie te dice esto, pero mató mi proyecto en 3 semanas..."
Razón: Fuerte contraste emocional con valor práctico inmediato.
Clip: ./output/short_01.mp4
#2 Score=89 [14:20 → 15:10]
Título: Por qué la mayoría fracasa aprendiendo a programar
Hook: "Si pasas más de 1 hora viendo tutoriales, estás perdiendo el tiempo..."
Razón: Opinión polémica que incentiva comentarios divididos.
Clip: ./output/short_02.mp4Y el archivo --output-json genera la estructura lista para pipelines:
{
"source_video_url": "https://www.youtube.com/watch?v=...",
"transcript": {
"duration": 1845.2,
"segments": [...]
},
"shorts": [
{
"title": "El error de $50,000 en mi primera startup",
"start_time": 135.0,
"end_time": 185.0,
"score": 94,
"hook_sentence": "Nadie te dice esto, pero mató mi proyecto en 3 semanas...",
"virality_reason": "Fuerte contraste emocional con valor práctico inmediato.",
"clip_url": "./output/short_01.mp4"
}
]
}🧩 Comparativa en el Ecosistema Multimedia de Ryukami Labs
| Herramienta | Enfoque Principal | Origen del Material | Tipo de Salida |
|---|---|---|---|
| 🎬 AI YouTube Shorts Generator | Recorte de vídeos largos existentes (estilo Opus Clip) | Vídeo largo de YouTube o archivo local | Múltiples shorts 9:16 con los mejores momentos |
| 🏭 Short Video Factory | Fábrica de vídeos sintéticos en lote (con prompts) | Carpeta de B-Roll + Guiones de LLM | Decenas de variantes de vídeos con EdgeTTS |
| 🌐 OpenCreator | Traducción, doblaje y subtitulado multimodal | Vídeos en otros idiomas o audios | Vídeos traducidos/doblados con sincronización labial |
| 🎙️ Kokoro TTS | Síntesis de voz ultra-ligera y natural | Texto plano | Archivos de audio WAV/MP3 hiperrealistas |
🔗 Enlaces y Referencias en la Bóveda
- Fábrica de vídeos sintéticos en lote: Shorts)
- Suite de doblaje y traducción: 🎬 OpenCreator (Traducción & Doblaje IA)
- Síntesis de voz ligera: 🎙️ Kokoro TTS (82M)
- Investigación y tendencias de redes: 🌐 Social Media Research Skills
- Automatización corporativa: Plan Maestro Google Vids CLI
- Índice General: ⚡ Ryukami Labs