Communitygithub.com

ever-just/agentskills

Adicione legendas animadas e legendas ocultas a vídeos Remotion a partir de arquivos .SRT. Destaques palavra por palavra estilo TikTok, efeitos de karaokê e muito mais.

O que é agentskills?

Este skill permite adicionar legendas animadas e legendas ocultas a projetos Remotion, utilizando arquivos .SRT como fonte de entrada. Ele oferece suporte a efeitos modernos como destaque palavra por palavra ao estilo TikTok e efeitos de karaokê, tornando os vídeos mais envolventes. O skill é implementado em TypeScript/React, exigindo um projeto Remotion existente, e pode ser instalado via npm. Além disso, fornece componentes flexíveis para estilização e temporização manual de legendas, com práticas recomendadas para posicionamento, contraste e animação de entrada.

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

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

Remotion Captions — Legendas Animadas para Vídeo

Adicione legendas animadas e legendas ocultas a vídeos Remotion a partir de arquivos .SRT. Destaques palavra por palavra estilo TikTok, efeitos de karaokê e muito mais.

Visão Geral

  • Repositório: github.com/ahgsql/remotion-subtitles
  • Linguagem: TypeScript / React
  • Licença: Open Source
  • Instalação: npm install remotion-subtitles
  • Requer: Projeto Remotion

Configuração

npm install remotion-subtitles

Uso Básico

A partir de um Arquivo 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
Bem-vindo ao Custom Agents

2
00:00:02,500 --> 00:00:05,000
A plataforma de e-mail com IA

3
00:00:05,000 --> 00:00:08,000
que gerencia sua caixa de entrada automaticamente

Estilização de Legendas

<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",
  }}
/>

Destaque Palavra por Palavra (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>
  );
};

Temporização Manual de Legendas

Se você não tiver um arquivo SRT, defina as legendas manualmente:

const captions = [
  { text: "Bem-vindo ao Custom Agents", startFrame: 0, endFrame: 75 },
  { text: "Automação de e-mail com IA", startFrame: 80, endFrame: 150 },
  { text: "Crie agentes em 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>
  );
};

Melhores Práticas

  1. Posicione na parte inferior — O posicionamento padrão de legendas é no centro inferior
  2. Use contraste — Texto branco com sombra escura ou fundo semitransparente
  3. Fonte grande — Mínimo de 40-50px para legibilidade em vídeo
  4. Frases curtas — Máximo de 2 linhas, 6-8 palavras por legenda
  5. Tempo de buffer — Inicie as legendas 2-3 quadros antes do áudio
  6. Animação de entrada — Fade/slide suave na entrada, sem animação na saída
  7. Peso negrito — Peso de fonte 700+ para legibilidade em vídeo

Fonte

  • remotion-subtitles: github.com/ahgsql/remotion-subtitles
  • Modelo 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.

Habilidades Relacionadas