🎬 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:

  1. Transcribe con Whisper (local con faster-whisper o en la nube).
  2. 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).
  3. Recorta automáticamente a formato vertical 9:16 utilizando seguimiento de rostros (face tracking con OpenCV) y cortes con FFmpeg.
  4. 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ámetroDetalle Técnico
RepositorioAnil-matcha/AI-Youtube-Shorts-Generator (GitHub)
LicenciaMIT License (Uso comercial permitido, integrable en SaaS propios)
Lenguaje & CorePython 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 LLMGoogle Gemini (gemini-2.5-flash) o OpenAI (gpt-4o-mini)
Aspect Ratios9: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 PreciosGratis & 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:

  1. Hook de Apertura (0-3 seg): La primera frase debe provocar curiosidad inmediata o romper un patrón mental.
  2. Picos Emocionales: Momentos de euforia, enojo, risa o sorpresa genuina.
  3. Bombas de Opinión (Opinion Bombs): Posturas contrarias al consenso general que invitan al debate en la caja de comentarios.
  4. Momentos de Revelación (Aha! Moments): Datos o explicaciones que hacen clic en la cabeza del espectador.
  5. Conflicto / Tensión: Discusiones o contrastes marcados entre dos ideas o personas.
  6. Frases Altamente Citables (Quotable Lines): Sentencias cortas y memorables ideales para compartir.
  7. Pico de Historia (Story Climax): El desenlace emocionante de una anécdota.
  8. 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 git

2. 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-Generator

3. 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.txt

4. 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 local

Los 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.json

C. 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 4

D. 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_3

Y ejecútalo en paralelo o en secuencia con xargs:

xargs -a urls.txt -I{} python main.py "{}" --mode local --num-clips 3

E. 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.mp4

Y 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

HerramientaEnfoque PrincipalOrigen del MaterialTipo de Salida
🎬 AI YouTube Shorts GeneratorRecorte de vídeos largos existentes (estilo Opus Clip)Vídeo largo de YouTube o archivo localMúltiples shorts 9:16 con los mejores momentos
🏭 Short Video FactoryFábrica de vídeos sintéticos en lote (con prompts)Carpeta de B-Roll + Guiones de LLMDecenas de variantes de vídeos con EdgeTTS
🌐 OpenCreatorTraducción, doblaje y subtitulado multimodalVídeos en otros idiomas o audiosVídeos traducidos/doblados con sincronización labial
🎙️ Kokoro TTSSíntesis de voz ultra-ligera y naturalTexto planoArchivos de audio WAV/MP3 hiperrealistas

🔗 Enlaces y Referencias en la Bóveda