Communitygithub.com

ever-just/agentskills

為 Remotion 影片添加動畫字幕與文字說明,支援 .SRT 檔案、TikTok 風格的逐字高亮以及卡拉 OK 特效。

agentskills 是什麼?

這是一個專為 Remotion 影片專案設計的 AI 助手技能,能讓開發者輕鬆導入 .SRT 字幕檔案,並將其轉換為具備動畫效果的字幕。它支援 TikTok 風格的逐字高亮(Word-by-Word Highlight)和卡拉 OK 特效,讓影片字幕更具吸引力。此技能基於 TypeScript/React 開發,需要先安裝 `remotion-subtitles` 套件並在 Remotion 專案中使用。除了匯入 SRT 檔案外,也可以手動定義字幕時間軸,並透過 CSS 樣式自訂字體、顏色、位置與動畫效果。

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

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

Remotion Captions — 為影片加入動畫字幕

從 .SRT 檔案為 Remotion 影片添加動畫字幕與文字說明。支援 TikTok 風格的逐字高亮、卡拉 OK 特效等。

總覽

  • 儲存庫: github.com/ahgsql/remotion-subtitles
  • 語言: TypeScript / React
  • 授權: 開源
  • 安裝: npm install remotion-subtitles
  • 需求: 需有 Remotion 專案

安裝

npm install remotion-subtitles

基本用法

從 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>
  );
};

SRT 格式範例

1
00:00:00,000 --> 00:00:02,500
Welcome to Custom Agents

2
00:00:02,500 --> 00:00:05,000
The AI-powered email platform

3
00:00:05,000 --> 00:00:08,000
that handles your inbox automatically

字幕樣式設定

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

逐字高亮(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>
  );
};

手動設定字幕時間軸

如果你沒有 SRT 檔案,也可以手動定義字幕:

const captions = [
  { text: "Welcome to Custom Agents", startFrame: 0, endFrame: 75 },
  { text: "AI-powered email automation", startFrame: 80, endFrame: 150 },
  { text: "Create agents in minutes", 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>
  );
};

最佳實踐

  1. 放置於底部 — 標準字幕位置為底部中央
  2. 使用對比色 — 白色文字搭配深色陰影或半透明背景
  3. 大字體 — 最小 40-50px,確保影片中可讀
  4. 簡短字句 — 最多兩行,每個字幕 6-8 個單詞
  5. 時間緩衝 — 在音訊開始前 2-3 影格啟動字幕
  6. 進場動畫 — 使用淡入/滑入效果,退出時不帶動畫
  7. 粗體字重 — 700+ 字重以確保影片可讀性

來源

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

相關技能