Communitygithub.com

プレゼンテーションビデオ

このスキルは、ユーザーが「アニメーションプレゼンテーションを作成」、「ピッチデッキをビデオに変換」、「スライド/デッキをビデオに変換」、「プレゼンテーションビデオを作成」、「デッキビデオを構築」、「ナレーション付きスライドデッキの自動再生ビデオ」などを依頼したときに使用します。スライドを段階的なビルドリビール、スライド間のトランジション、各スライドのナレーションに同期したタイミングを持つモーショングラフィックスとして再構築します。

プレゼンテーションビデオ とは?

このスキルは、プレゼンテーションデッキやスライドのアウトラインを、ナレーションが自動で進行するアニメーションビデオに変換するためのものです。PowerPointの画面録画とは異なり、各スライドをモーショングラフィックスとしてコード(Remotion)で再構築し、要素の段階的な表示、スライド間のトランジション、ナレーションに完全に同期したタイミングを実現します。主なユースケースは、ピッチデッキ、ウェビナー、コースモジュールなど、自己再生型ビデオにしたい場合や、箇条書きのアウトラインからナレーション付きアニメーションスライドを生成したい場合です。このスキルが役立つ理由は、画面録画では避けられない静的な見た目やマウスのジッター、不自然なスライドカットを排除し、フレーム単位で決定論的なリビール、自然なトランジション、高解像度で鮮明なテキスト、そして音声の長さによって正確に駆動されるスライド時間を提供する点にあります。動作の核となるルールは「ナレーションが時間を支配する」ことで、各スライドの長さはそのナレーション音声の実際の長さから正確に計算されます。スライド内の要素は`useCurrentFrame()`を使用してナレーションの進行に合わせて順次表示され、スライド間のトランジションは控えめに設定され、コンテンツが主役となるように設計されています。このスキルは主にRemotion上で動作し、フレーム駆動のアニメーションと決定論的なレンダリングを特徴としています。出力はナレーション付きMP4ファイルであり、スキルにはスライドコンポーネント、シーケンス、検証スクリプトのリファレンスファイルも含まれています。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/playlikeboy/videos-skill/tree/HEAD/.claude/skills/presentation-video

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

プレゼンテーションビデオ は何をしますか?

デッキまたはスライドのアウトラインを、ナレーション付きで自動進行するアニメーションビデオに変換します。各スライドはモーショングラフィックスとして再構築されます — 要素の段階的な表示、実際のトランジション、ナレーションにロックされたタイミング — PowerPointをクリックしている画面録画ではありません。

使用するタイミング

  • ピッチデッキ、ウェビナー、またはコースモジュールを、自動再生ビデオにしたい場合。
  • 箇条書きのアウトラインを、ナレーション付きのアニメーションスライドにしたい場合。
  • スライドのタイミングがナレーションに正確に追従する必要があるデッキ(自動進行、クリック不要)。

再構築、録画はしない

画面録画はデッキの静的な見た目、マウスのジッター、不自然なスライドカットを継承します。コード(Remotion)で再構築することで得られるものは:フレーム単位で決定論的なリビール、実際にイージングするトランジション、どの解像度でも鮮明なテキスト、そして音声の長さによって駆動されるスライド時間です。デッキはスクリプトになり、ビデオは新しい成果物になります。

ナラティブフロー:デッキはN枚のスライドではなく、一つの議論

タイミングやモーションの前に、ストーリーを修正します。自動進行するプレゼンテーションビデオには、迷子になったスレッドを回復するプレゼンターがいません — 構造自体が論理を伝えなければなりません。まず背骨を作ります。スライドはその上にあるビートです。

  • 一つの一貫したテーマ(背骨)。 デッキの単一の要点を一文で述べます。すべてのスライドはその一文を前進させなければなりません。もしスライドがそうでなければ、それを削除するか付録に移動します。視聴者は一度見ただけで背骨を再現できるはずです。
  • スライドごとに一つのメッセージ。 スライドは正確に一つのポイントを伝えます — そのタイトルがそのポイントであり、「チャーンは私たちの真の成長税である」のような主張として表現され、「チャーン」のようなラベルではありません。二つのアイデアがある場合は、二つのスライドを意味します。
  • トランジションは論理を運び、単なるモーションではない。 スライド間のカットは「次は何か?」に答えるべきです — したがって、しかし、つまり、これが証拠です。モーションを論理的な動きに合わせます。「そしてまた」には静かなフェードを、「新しい幕」にはより大きなセクションプッシュを。論理的なステップを示さないトランジションは単なる装飾です。
  • フックで始め、CTAで締めくくる。 最初のスライドは約5秒で注目を集めます — 鋭い質問、驚くべき統計、ステークス — アジェンダやロゴのホールドではありません。最後のスライドは、あなたが望む単一のアクションを述べます(「パイロットを開始する」、「15%で200万ドルを投資する」)、テイクアウェイフレームとして静止します。

緊張 → 解決(ピッチの背骨)

ピッチはドラマであり、機能リストではありません。緊張が高まり、そして解決するようにシーケンスします — 各幕が次の幕を設定します。

幕ビート役割
問題「ここが壊れている/危機に瀕している」視聴者が感じる緊張を生み出す
洞察「ここが誰もが見逃している点だ」明白でない転換;解決策を得る
解決策「ここが私たちの答えだ」問題が作った緊張を解決する
証明「ここがそれが機能する理由だ」牽引力、デモ、数字
依頼「ここが私たちが望むものだ」一つの具体的なCTA

問題が着地する前に解決策を明かさないでください — 価値のない解決策は機能のように感じられ、安堵感にはなりません。スライドをこれらの幕にマッピングしてください。幕が欠けている場合、議論に穴があります。

ペーシング:ビルドを音声と同期させる

一貫したテーマは時間とともに展開されるため、画面上のビルドとナレーションは一緒に進行しなければなりません — ナレーションが時計を所有し(次のセクション)、リビールはそれに対してスケジュールされるため、視聴者は話されている通りに行を読み、決して先読みしません。スライドごとに一つのメッセージがあれば、これは自然になります。スライドは、声がそれを主張する正確な時間だけ一つのポイントを保持し、その後トランジションが次の論理的なステップを示します。一つのポイントに関する長いナレーションは、スライドを分割することを意味し、ビルドを競わせることではありません。

唯一のルール:ナレーションが時計を所有する

各スライドは、そのナレーション音声の正確な長さに、小さなハンドルを加えたものだけ続きます。 すべてのナレーションクリップの実際の時間を測定し、フレームに変換し、それをスライドの長さにします。「このスライドは約5秒と感じる」と目視で判断しないでください — 常にずれが生じ、音声が途切れたり、早く終わったりします。

import { getAudioDurationInSeconds } from "@remotion/media-utils";
// RemotionのcalculateMetadata() / ビルドステップで、スライドごとに:
const sec = await getAudioDurationInSeconds(slide.audioUrl);
const HANDLE = 0.4; // 音声終了後の呼吸のための余裕
slide.durationInFrames = Math.ceil((sec + HANDLE) * fps);

そして、スライド内部のリビールはその時間に対してスケジュールされます — 箇条書きは固定されたグリッドではなく、言葉に合わせて配置されます。

ビルドリビール:装飾ではなく、表示するためにアニメーション化する

ビルドのポイントはペーシングです:ナレーションがそこに達したときに各要素を表示し、視聴者が話されている行を読むように — 三行先を読むのではなく。要素を段階的に表示します。タイトル、ロゴ、背景の形状は静的に保ちます。

選択肢推奨理由
出現動作フェード+12~24ピクセル上昇洗練され、穏やか;「到着している」と読める
要素ごとの時間0.25~0.5秒流れるのに十分速く、認識するのに十分遅い
箇条書き間の間隔0.15~0.4秒連続的、テキストの壁ではない
避けるべきものフライイン、スピン、バウンス、タイプライター装飾的に読め、声と競合する

間隔はuseCurrentFrame()を使用して駆動し、レンダリングされた音声と完全に同期したままにします(完全なコンポーネントについてはreferences/slide-components.mdを参照)。

import { useCurrentFrame, interpolate, spring, useVideoConfig } from "remotion";

const Bullet: React.FC<{ index: number; children: React.ReactNode }> = ({ index, children }) => {
  const frame = useCurrentFrame();
  const { fps } = useVideoConfig();
  const STAGGER = 8;                         // 箇条書き間のフレーム数(30fpsで約0.27秒)
  const enter = frame - index * STAGGER;     // 各箇条書きは後に開始
  const p = spring({ frame: enter, fps, config: { damping: 200 }, durationInFrames: 12 });
  return (
    <li style={{ opacity: p, transform: `translateY(${interpolate(p, [0, 1], [18, 0])}px)` }}>
      {children}
    </li>
  );
};

スライド間のトランジション

@remotion/transitionsの<TransitionSeries>を使用してスライドをシーケンスします。各スライドは、ナレーションから派生したdurationInFramesを持つSequenceです。Transitionがそれらの間に配置されます。トランジションは控えめに保ちます(短いフェードまたは穏やかなスライド)— コンテンツが主役であり、すべてのカットで忙しいワイプはすぐに疲れます。

import { TransitionSeries, linearTiming } from "@remotion/transitions";
import { fade } from "@remotion/transitions/fade";

<TransitionSeries>
  {slides.map((s, i) => (
    <React.Fragment key={s.id}>
      <TransitionSeries.Sequence durationInFrames={s.durationInFrames}>
        <Slide {...s} />
      </TransitionSeries.Sequence>
      {i < slides.length - 1 && (
        <TransitionSeries.Transition
          timing={linearTiming({ durationInFrames: 15 })}
          presentation={fade()}
        />
      )}
    </React.Fragment>
  ))}
</TransitionSeries>

より大きなトランジション(スライド/プッシュ)はセクション区切りのためだけに予約します — それは「新しいトピック」を示し、余分なモーションを得る価値があります。トランジションは両方の隣接スライドからフレームを借用するため、スライドのナレーションを完全に再生する必要がある場合は、その長さをスライドの予算に追加し戻します。references/sequencing.mdを参照してください。

タイトルとセクション区切り

タイトルカードとセクション区切りはビデオにリズムを与え、密度の高いスライドの間に視聴者が息をつくことを可能にします。区切りをそれ自身の短い「スライド」として扱います:大きなセクション番号/単語、セクションタイトル、約1.5~2秒のホールド、そして両側により顕著なトランジション。区切りの視覚言語(色、タイプ)を一貫させ、別のビデオではなく句読点として読まれるようにします。

テキストを読みやすく、ブランドに沿って保つ

スライドはテキストが多いため、読みやすさがすべてです。

  • タイプスケール、デッキスケールではない。 ラップトップで表示されるデッキと、フィードで表示されるビデオは異なります。1080pで本文を28~32ピクセル以上に、タイトルを56~80ピクセルにします。スライドに収めるために16ピクセルの脚注が必要な場合、それは二つのスライドに分割する必要があります。
  • スライドごとに一つのアイデア。 スライドのナレーションが長くなる場合は、分割します — 収めるためにタイプサイズを小さくすることは決してしません。
  • コントラスト+安全マージン。 4.5:1以上のコントラスト比を保持します。すべてのコンテンツを中央90%以内に収め、プラットフォームのクロッピングに耐えられるようにします。
  • ブランドをテーマオブジェクトに固定する。 色、フォント、ロゴ、間隔は一つのthemeに格納し、すべてのスライドが一貫し、リブランドが一行の変更で済むようにします。
export const theme = {
  bg: "#0B0B12", fg: "#F5F5F7", accent: "#6C5CE7",
  font: "Inter, system-ui, sans-serif",
  titlePx: 72, bodyPx: 30, maxWidthPct: 90,
} as const;

ワークフロー

  1. アウトライン → スクリプト。 一つのスライド = 一つのアイデア + 正確なナレーション行。これが唯一の真実の情報源です。
  2. スライドごとにナレーションを生成/録音する。 スライドごとに一つの音声ファイル(TTSまたは録音)。
  3. 音声を測定 → スライド時間を設定する。 getAudioDurationInSeconds → フレーム(上記のルール)。
  4. useCurrentFrame()に結びついた段階的なリビールを持つスライドコンポーネントを構築する。
  5. <TransitionSeries>でシーケンスする。 タイトルとセクション区切りを追加します。
  6. 各スライドの音声をそのSequence内にマウントします。 これにより、声と映像が決してずれることがありません。
  7. 読みやすさ/ブランドパスを確認し、MP4にレンダリングします。

出力チェックリスト

  • すべてのスライドのdurationInFramesは、推測ではなく、そのナレーション音声から派生しています。
  • 各スライドの音声は、それ自身のSequence内にマウントされています(ビジュアル+音声が一緒にロックされています)。
  • 箇条書きはuseCurrentFrame()を介して順次表示されます。タイトル/ロゴは静的です。
  • リビールはフェード+上昇で、0.25~0.5秒、装飾的な効果はありません。
  • スライド間のトランジションは控えめです。大きなトランジションはセクション区切りにのみ使用します。
  • 1080pで本文タイプは28ピクセル以上、4.5:1以上のコントラスト、コンテンツは中央90%以内。
  • スライドごとに一つのアイデア。長いナレーションはタイプサイズを縮小する代わりにスライドを分割します。

配信と検証(レンダリングされた静止画 → MP4)

パッケージ化されたヘルパー(scripts/):scripts/contact-sheet.sh sheet.png f-hook.png f-mid.png f-end.pngを使用して静止画をタイル表示し、scripts/probe-mp4.sh out.mp4 [WxH] [fps]でエンコードをアサートします。scripts/README.mdを参照してください。

Remotionはフレーム決定論的です — すべての箇条書きビルド、トランジション、スライド位置はuseCurrentFrame()の純粋関数であるため、シークハーネスなしで任意のフレームをヘッドレスでレンダリングできます。納品物はナレーション付きMP4であるため、静止画検査でクリップされたタイトル、ブランドから外れた色、またはあふれた箇条書きを、完全なエンコードを無駄にする前にキャッチできます。

出力契約:

  • デッキが登録された(<Composition> + zod schema + defaultProps)、すべてのモーションがフレーム駆動(タイマー/Date.now()/Math.random()なし)のRemotionプロジェクト。各スライドの音声はそれ自身のSequence内にマウントされています。
  • 納品物 = レンダリングされたout/*.mp4(およびプロジェクト。ユーザーが新しいスライド/ナレーションで再レンダリングできるように)。
  • スライド時間はナレーションから派生 — calculateMetadataで合計およびスライドごとのdurationInFramesを計算します(各音声クリップを測定します)。手作業では決して行いません。

検証ループ — 静止画をレンダリング → 検査 → エンコード。 最初に単一フレームをレンダリングします(安価、ビデオエンコードなし)。その後、各スライドが正しく構築され、読める状態になってから一度だけエンコードします。

# 1. フレーム精度の静止画 — SHIPPED propsを使用。各スライドの落ち着いた状態内に着地:
npx remotion still Deck out/f-title.png --frame=20  --props='{"slides":[...]}'   # タイトルカード安定
npx remotion still Deck out/f-mid.png   --frame=240 --props='{"slides":[...]}'   # コンテンツスライド、箇条書き構築済み
npx remotion still Deck out/f-end.png   --frame=899 --props='{"slides":[...]}'   # 最終フレーム = durationInFrames - 1

# 2. 各PNGを検査 — 忠実度(スライドテキスト正確、数字/ラベル正しい、ブランドの色/フォント適用)
#    およびアーティファクト(テキストあふれ、本文タイプが小さすぎる、中央90%の安全クロップ外のコンテンツ、
#    フォント欠落、低コントラスト、スライドが落ち着くべき場所で箇条書きが途中で構築されている)。

# 3. 静止画が問題ない場合のみ、エンコード:
npx remotion render Deck out/deck.mp4 --props='{"slides":[...]}'
  • npx remotion compositionsを使用してデッキのdurationInFrames/fpsを読み取り、最終フレームを選択します。トランジション上ではなく、各スライドのホールド内の静止画をサンプリングして、構築された状態を判断します。
  • データ駆動/バッチ:すべてのバリアントをレンダリングする前に、代表的なデッキ(実際のスライドとナレーション)を静止画で検証します — タイプスケールやあふれバグをデッキごとではなく一度だけキャッチします。
  • READMEデモGIFを無料で:npx remotion render Deck out/demo.gif --codec=gif。

終了する前に:

  1. npx remotion stillがタイトル、コンテンツスライド、最終フレームでクリーンにレンダリングされる — エラーなし、フォント欠落なし。
  2. スライドテキストが正確で、1080pで本文タイプが28ピクセル以上、4.5:1以上のコントラスト、各フレームで全コンテンツが中央90%以内にある。
  3. フレーム駆動のみ — Date.now()/Math.random()/ライブラリタイマーなし(決定論性がCIで維持される)。
  4. 出荷された propsが正しくレンダリングされる(defaultPropsだけでなく) — 正しいスライド、ナレーションがマウントされ、時間が音声から派生している。
  5. 完全なMP4がエンコードされ、再生される(音声+ビジュアルがロックされている)。(オプション)README用にGIFがレンダリングされている。

リファレンスファイル

  • references/slide-components.md — 完全に実行可能なRemotion Slide、段階的なBulletList、アニメーション化されたTitleCard、およびSectionDividerコンポーネント。共有テーマと、<Audio>を介してマウントされたスライドごとのナレーションを備えています。
  • references/sequencing.md — 完全なデッキシーケンサ:すべてのナレーションクリップを測定し、合計およびスライドごとの時間を設定するcalculateMetadata、<TransitionSeries>アセンブリ、トランジションフレーム予算の会計処理、およびJSONデッキスキーマからビデオへのデータフローを備えています。

Individual skills in this repo

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

animated-infographic

This skill should be used when the user asks to "make an animated infographic", "create an infographic video", "build an infographic animation", "animate an explainer infographic", "do a sequenced reveal of icons and stats", "animate icons with key numbers and connectors", or "lay out a designed infographic that animates in sequence". Covers infographic layout & visual hierarchy, staggered element reveals, animating icons/pictograms, key-number counters, connectors/flow, and section pacing. For heavy charting (bar chart race, charts from a CSV) use the chart-animation skill instead.

brand-motion-guidelines

This skill should be used when the user asks to "write motion guidelines", "create a brand motion system", "define easing and timing tokens", "document our animation principles", "build a motion language like Slack/IBM/Klarna", "set up entrance/exit/transition rules", or "add a reduced-motion / accessibility section". It outputs a fill-in-ready brand motion guidelines document.

explainer-video

This skill should be used when the user asks to "make an explainer video", "turn this into a short explainer", "write a script and storyboard for a product video", "produce a how-it-works/onboarding video", "sync narration and captions", or "build a 30–90s animated explainer". Covers script→storyboard→scene build→narration/caption sync→edit→polish.

product-demo-video

This skill should be used when the user asks to "make a product demo video", "create an app demo video", "build a feature announcement video", "do a SaaS demo", "make a UI walkthrough video", "animate product screenshots into a demo", "add an animated cursor/click to a screenshot", or "zoom into part of a UI". Covers turning static screenshots/designs (not screen recordings) into a clean animated demo: device/browser frames, animated cursor + click ripple, zoom/pan to focal UI, callout annotations, step pacing, screen-to-screen transitions, and feature captions.

shot-composition

This skill should be used when the user asks to "compose a frame", "set up a grid", "plan shot composition", "place the focal point", "decide where elements enter and exit", "add a parallax/camera move", "adapt a layout for 16:9 / 9:16 / 1:1", or "keep content inside safe areas". Covers grids, safe areas, focal hierarchy, and 2D/3D camera framing.

whiteboard-animation

This skill should be used when the user asks to "make a whiteboard animation", "draw-on explainer", "VideoScribe style", "hand-drawn explainer video", "animate a sketch being drawn", "do a doodle/scribe video", "show a hand drawing the illustration", or "animate handwriting appearing on a whiteboard". Covers SVG stroke draw-on, a marker hand that follows the path tip, staggered reveal, erase/wipe transitions, and narrated export.

関連スキル