Communitygithub.com

iamaanahmad/captions-subtitles

Crea, edita, traduce y quema (burn in) subtítulos y leyendas. Transcribe voz con Whisper, escribe archivos SRT/VTT/ASS, dales estilo y genera subtítulos con resaltado de palabras para Shorts, Reels y TikTok.

¿Qué es captions-subtitles?

Esta habilidad permite a un agente de IA (como Claude Code, Cursor o Codex) gestionar el flujo completo de trabajo de subtítulos y leyendas para vídeo. Transcribe audio usando Whisper (openai-whisper o faster-whisper), genera archivos SRT, VTT y ASS, los quema directamente en el vídeo con FFmpeg (con o sin estilos avanzados) y produce subtítulos con resaltado de palabras al estilo karaoke para formatos verticales (Shorts, Reels, TikTok). Soporta todos los pasos: extracción de audio limpio (ffmpeg), transcripción, revisión ortográfica manual, escritura de archivos de subtítulos respetando reglas de legibilidad (máx. 2 líneas, ~42 caracteres por línea, velocidad bajo 17 caracteres/segundo), y renderizado con FFmpeg usando force_style para SRT o ASS para control total. Incluye pautas para traducción de textos manteniendo límites de línea según el idioma y buenas prácticas para entrega (versión quemada para redes sociales, SRT/VTT independiente para YouTube/LinkedIn, pista suave en MP4). La documentación asume que el usuario tiene instalados Python, ffmpeg, whisper o faster-whisper, y opcionalmente alguna biblioteca de subtítulos (pysubs2).

Compatible con~Claude Code✓Codex CLI~Cursor
npx skills add https://github.com/iamaanahmad/agents-video-editing-skills/tree/HEAD/skills/captions-subtitles

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

Captions and Subtitles

La mayoría del vídeo social se ve sin sonido. Los subtítulos son parte de la edición, no un extra.

1. Transcribir

# openai-whisper (pip install openai-whisper)
whisper audio.mp3 --model small --language en --output_format srt --output_dir captions/

# faster-whisper (pip install faster-whisper): más rápido, menor memoria, marcas de tiempo por palabra
python - <<'PY'
from faster_whisper import WhisperModel
model = WhisperModel("small", compute_type="int8")
segments, info = model.transcribe("audio.mp3", word_timestamps=True, vad_filter=True)
for s in segments:
    for w in s.words:
        print(f"{w.start:.2f}\t{w.end:.2f}\t{w.word}")
PY

Extrae primero el audio limpio para mejores resultados:

ffmpeg -i video.mp4 -vn -ac 1 -ar 16000 audio.wav

El tamaño del modelo intercambia precisión por velocidad: base < small < medium < large. Usa small o medium para inglés, large para acentos difíciles u otros idiomas.

Si el guion ya existe (generaste la locución a partir de él), no confíes en el texto de la transcripción. Usa el texto del guion y emplea Whisper solo para la sincronización (alineación forzada). Esto mantiene exactos los nombres y números.

2. Corregir el texto

Revisa nombres propios, nombres de productos, números. Whisper a menudo los interpreta mal. Pide al usuario un glosario cuando el tema sea técnico.

3. Escribir archivos de subtítulos

SRT:

1
00:00:00,000 --> 00:00:02,400
La mayoría de los builds fallan en viernes.

2
00:00:02,400 --> 00:00:05,100
Aquí está el porqué.

Reglas de legibilidad:

  • Máximo 2 líneas, aproximadamente 42 caracteres por línea (unas 20 para vídeo vertical).
  • Velocidad de lectura inferior a 17 caracteres por segundo; duración mínima de la pista 1 segundo.
  • Cortar al final de una frase, no en medio. Nunca dividir un nombre entre pistas.
  • Las pistas no deben solaparse. Mantén un espacio de 2 fotogramas o ninguno.

4. Quemar (Burn in)

# Estilo suave mediante force_style (SRT)
ffmpeg -i in.mp4 -vf "subtitles=captions.srt:force_style='FontName=Arial,FontSize=22,PrimaryColour=&H00FFFFFF,OutlineColour=&H00000000,BorderStyle=1,Outline=2,Alignment=2,MarginV=60'" -c:a copy out/captioned.mp4

# ASS ofrece control total (karaoke, resaltado de palabras, posiciones, animación)
ffmpeg -i in.mp4 -vf "ass=captions.ass" -c:a copy out/captioned.mp4

Problema con rutas en Windows: en los filtros, escapa el dos puntos de la unidad y usa barras inclinadas (subtitles='C\:/work/captions.srt'), o ejecuta FFmpeg desde la carpeta que contiene el archivo y usa una ruta relativa.

5. Estilo con resaltado de palabras para formato corto

Genera un archivo ASS con un evento por grupo de palabras (2 a 4 palabras), y usa la etiqueta karaoke \k o la sobrescritura de color por palabra para que la palabra activa cambie de color. Aspecto típico: sans-serif en negrita, texto blanco, contorno negro de 3 a 4 px, palabra activa en un color de acento de la marca, colocada en el tercio inferior medio, no en la parte inferior (la interfaz de la plataforma la cubre).

Encabezado ASS mínimo para empezar:

[Script Info]
ScriptType: v4.00+
PlayResX: 1080
PlayResY: 1920

[V4+ Styles]
Format: Name,Fontname,Fontsize,PrimaryColour,SecondaryColour,OutlineColour,BackColour,Bold,Italic,Underline,StrikeOut,ScaleX,ScaleY,Spacing,Angle,BorderStyle,Outline,Shadow,Alignment,MarginL,MarginR,MarginV,Encoding
Style: Default,Arial,72,&H00FFFFFF,&H0000D7FF,&H00000000,&H64000000,-1,0,0,0,100,100,0,0,1,4,0,2,60,60,520,1

[Events]
Format: Layer,Start,End,Style,Name,MarginL,MarginR,MarginV,Effect,Text
Dialogue: 0,0:00:00.00,0:00:01.20,Default,,0,0,0,,{\k30}La {\k40}mayoría {\k30}falla

Los colores en ASS son &HAABBGGRR (orden azul-verde-rojo, alfa primero).

6. Entregar

  • Versión quemada para plataformas sociales.
  • Un archivo .srt o .vtt independiente para YouTube, LinkedIn y reproductores web (los espectadores pueden activar/desactivar y traducir).
  • Pista de subtítulos suave en MP4: -i captions.srt -c copy -c:s mov_text.

Traducir

Traduce el texto de las pistas, no la temporización. Mantén los límites de línea por idioma (el alemán y el finlandés son más largos, por lo que hay que reajustar). Haz que un hablante nativo lo revise cuando el vídeo sea público.

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

Skills relacionados