Communitygithub.com

ever-just/agentskills

Agrega subtítulos animados y leyendas a videos de Remotion desde archivos .SRT. Resaltados palabra por palabra al estilo TikTok, efectos de karaoke y más.

¿Qué es agentskills?

Este skill permite a los agentes de IA agregar subtítulos y leyendas animadas a videos creados con Remotion, utilizando archivos .SRT como fuente. Ofrece funcionalidades como resaltado palabra por palabra al estilo TikTok, efectos de karaoke y transiciones suaves. Es útil para crear videos con subtítulos profesionales de manera automatizada, ideal para contenido educativo, promocional o redes sociales. Compatible con proyectos Remotion existentes, se instala mediante npm y se integra fácilmente con React y TypeScript. El skill también permite definir leyendas manualmente si no se dispone de un archivo SRT, ofreciendo control total sobre la temporización y el estilo.

Compatible con~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/ever-just/agentskills/tree/HEAD/skills/remotion-captions

Preguntar en tu IA favorita

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

Documentación

Remotion Captions — Subtítulos Animados para Video

Agrega subtítulos y leyendas animadas a videos de Remotion desde archivos .SRT. Resaltados palabra por palabra al estilo TikTok, efectos de karaoke y más.

Resumen

  • Repositorio: github.com/ahgsql/remotion-subtitles
  • Lenguaje: TypeScript / React
  • Licencia: Código Abierto
  • Instalación: npm install remotion-subtitles
  • Requiere: Proyecto Remotion

Configuración

npm install remotion-subtitles

Uso Básico

Desde Archivo SRT

import { useSubtitles, SubtitleSequence } from "remotion-subtitles";

export const CaptionedVideo: React.FC = () => {
  const subtitles = useSubtitles("./subtitles.srt");

  return (
    <AbsoluteFill>
      <Video src={staticFile("video.mp4")} />
      <SubtitleSequence subtitles={subtitles} />
    </AbsoluteFill>
  );
};

Formato SRT

1
00:00:00,000 --> 00:00:02,500
Bienvenido a Custom Agents

2
00:00:02,500 --> 00:00:05,000
La plataforma de correo electrónico impulsada por IA

3
00:00:05,000 --> 00:00:08,000
que gestiona tu bandeja de entrada automáticamente

Estilizado de Leyendas

<SubtitleSequence
  subtitles={subtitles}
  style={{
    position: "absolute",
    bottom: 80,
    left: 0,
    right: 0,
    textAlign: "center",
    fontSize: 42,
    fontWeight: "bold",
    color: "white",
    textShadow: "2px 2px 8px rgba(0,0,0,0.8)",
    fontFamily: "Inter, sans-serif",
  }}
/>

Resaltado Palabra por Palabra (Estilo TikTok)

import { useCurrentFrame, interpolate } from "remotion";

export const WordHighlightCaption: React.FC<{
  words: { text: string; startFrame: number; endFrame: number }[];
}> = ({ words }) => {
  const frame = useCurrentFrame();

  return (
    <div style={{
      position: "absolute",
      bottom: 100,
      width: "100%",
      textAlign: "center",
      display: "flex",
      justifyContent: "center",
      gap: 8,
      flexWrap: "wrap",
      padding: "0 60px",
    }}>
      {words.map((word, i) => {
        const isActive = frame >= word.startFrame && frame <= word.endFrame;
        const scale = isActive
          ? interpolate(frame, [word.startFrame, word.startFrame + 3], [1, 1.15], { extrapolateRight: "clamp" })
          : 1;

        return (
          <span
            key={i}
            style={{
              fontSize: 48,
              fontWeight: 800,
              color: isActive ? "#FFD700" : "white",
              textShadow: isActive
                ? "0 0 20px rgba(255,215,0,0.5)"
                : "2px 2px 4px rgba(0,0,0,0.8)",
              transform: `scale(${scale})`,
              transition: "color 0.1s",
              display: "inline-block",
            }}
          >
            {word.text}
          </span>
        );
      })}
    </div>
  );
};

Temporización Manual de Leyendas

Si no tienes un archivo SRT, define las leyendas manualmente:

const captions = [
  { text: "Bienvenido a Custom Agents", startFrame: 0, endFrame: 75 },
  { text: "Automatización de correo electrónico con IA", startFrame: 80, endFrame: 150 },
  { text: "Crea agentes en minutos", startFrame: 155, endFrame: 240 },
];

export const ManualCaptions: React.FC = () => {
  const frame = useCurrentFrame();

  const current = captions.find(
    (c) => frame >= c.startFrame && frame <= c.endFrame
  );

  if (!current) return null;

  const progress = interpolate(
    frame,
    [current.startFrame, current.startFrame + 10],
    [0, 1],
    { extrapolateRight: "clamp" }
  );

  return (
    <div style={{
      position: "absolute",
      bottom: 80,
      width: "100%",
      textAlign: "center",
      opacity: progress,
      transform: `translateY(${(1 - progress) * 10}px)`,
    }}>
      <span style={{
        fontSize: 44,
        fontWeight: 700,
        color: "white",
        backgroundColor: "rgba(0,0,0,0.6)",
        padding: "8px 24px",
        borderRadius: 8,
      }}>
        {current.text}
      </span>
    </div>
  );
};

Mejores Prácticas

  1. Posicionar en la parte inferior — La colocación estándar de los subtítulos es en la parte inferior central
  2. Usar contraste — Texto blanco con sombra oscura o fondo semitransparente
  3. Fuente grande — Mínimo 40-50px para legibilidad en video
  4. Frases cortas — Máximo 2 líneas, 6-8 palabras por leyenda
  5. Margen de temporización — Iniciar las leyendas 2-3 fotogramas antes del audio
  6. Animación de entrada — Desvanecimiento/deslizamiento sutil hacia adentro, sin animación al salir
  7. Negrita — Peso de fuente 700+ para legibilidad en video

Fuentes

  • remotion-subtitles: github.com/ahgsql/remotion-subtitles
  • Plantilla Remotion Audiogram: github.com/remotion-dev/template-audiogram

Individual skills in this repo

This repo contains 9 individual skills — each has its own dedicated page.

ever-just/agentskills

> Declarative animations for React. Springs, gestures, layout animations, and page transitions. GPU-accelerated, production-ready.

ever-just/agentskills

> Create animated logos, icons, and micro-interactions as lightweight Lottie JSON files. No After Effects needed — build animations entirely in code.

ever-just/agentskills

> A TypeScript library using generators to program animations with a real-time editor. Ideal for explainer videos, code walkthroughs, and educational content.

ever-just/agentskills

> Create videos programmatically using React components. The most mature framework for code-driven video production.

ever-just/agentskills

> Copy-paste video components for Remotion. Intros, text effects, transitions, and full scene templates. Like shadcn/ui but for video.

ever-just/agentskills

Extract actionable intelligence from video content across YouTube, Vimeo, and company websites. Video reveals what text sources cannot: facility scale, team composition, product demonstrations, signage, event attendance, and operational reality.

ever-just/agentskills

Optimize and embed an existing video as a fast, crisp, autoplaying hero/background/loop on a website. Use when adding or replacing a video on a marketing site and it is too heavy, will not autoplay (especially on mobile/Safari), shows a codec error, or looks soft — to transcode it to web-safe H.264 with the right pixel format, faststart, retina-aware sizing, and a poster frame, then embed and verify it actually plays. This is optimization + embedding of footage you already have, not creating/animating a video (for that use remotion/moviepy/motion-canvas). Use when the user says "add this video to the site", "the hero video is too big / won't play / isn't crisp", "replace the homepage video", or "make this loop on the landing page".

ever-just/agentskills

Full conversion audit for any homepage or landing page. Use when someone asks to "review my homepage," "audit my landing page," "why isn't my page converting," "check my website," or wants feedback on their marketing page. Requires URL or screenshot before proceeding.

ever-just/agentskills

Automatically fetch YouTube video transcripts, generate structured summaries, and send full transcripts to messaging platforms. Detects YouTube URLs and provides metadata, key insights, and downloadable transcripts.

Skills relacionados