Communitygithub.com

dolly:Remotion でローンチ動画、全フォーマット対応

Remotion のコードで作る製品・ローンチ・デモ・SNS 動画。実際の画面録画を 3D フローティングウィンドウに配置し、カメラワーク、キネティックタイポ、チャート、トランジション、既製シーンを 8 スタイル・16:9 / 9:16 / 1:1 / 4:5 で。

dolly:Remotion でローンチ動画、全フォーマット対応 とは?

製品デモ動画レシピのステップ 1(ローンチ動画)。pvhuwung/dolly(2026-10-12 作成)より。README に hero.gif とスタイル・画角の比較画像あり。スターターには実録画から作った 41 秒のローンチ版と 25 秒のテンプレート版プロモを同梱。エージェントが素材を録画・解析し、シーンを組み、コンタクトシートで確認してからレンダリング。

対応~Claude Code~Codex CLI✓Cursor
npx skills add pvhuwung/dolly

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

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

ドキュメント

dolly: 製品ビデオとモーショングラフィックスをコードで実現

このビデオはRemotionプロジェクトです。Reactコンポーネントをフレームごとにレンダリングします。このファイルの隣にあるstarter/には、動作する2つのビデオが含まれています。Videoは実際の録画から作成されたTermaryのローンチビデオの41秒カット、Promoはテンプレートのみから作成された25秒のモーショングラフィックスカットです。どちらも8つのスタイルと4つのフォーマットでレンダリング可能です。これらをユーザーのものに変換し、うまく機能する要素はそのまま残します。

計画 → 映像(録画するか、ユーザーのものをスキャン) → シーンを構築 → フレームを確認 → レンダリング

あなたはビデオを視聴できないため、コンタクトシートをレンダリングしてPNGを読み取ることで確認します。変更後は毎回これを行ってください。ほとんどの悪い動きはシートで確認できます。

必要なものだけを読んでください。 パスはこのスキルのフォルダからの相対パスです。

場合読むもの
Macで製品を録画する場合(操作対象者が操作):アプリ、ウェブサイト、iOSシミュレーターreferences/record-mac.md
ユーザーが録画する必要がある場合:Windows、実機、操作できないデバイスやアカウントreferences/record-elsewhere.md
ユーザーが自分で録画したものを提供する場合references/your-footage.md
録画から構築されたシーン:3Dキットとカメラの動きreferences/camera.md
製品ローンチではないビデオ:イベント、採用、チェンジログ、データストーリーなどreferences/agendas.md
コンポーネントの選択:テンプレート、テキスト、グラフィックス、描画、背景、トランジションstarter/src/library/CATALOG.md
レンダリングがおかしい場合、または新しいコンポーネントを作成する場合references/gotchas.md

1. 開始

<このスキルのフォルダ>/new.sh my-video     # Nodeを確認、スターターをコピー、すべてをインストール
cd my-video && npx remotion studio         # オプション:ユーザーはlocalhost:3000でスクラブ可能

new.shは、Nodeが不足している場合はHomebrewでインストールし、npm installを実行し(サウンドエフェクトも生成)、Remotionがレンダリングに使用するヘッドレスChromeをダウンロードし、observeeがインストールされているかどうかを表示します。Windowsの場合は、winget install OpenJS.NodeJS.LTSを実行した後、Git Bashで実行します。既存のRemotion 4.0.320+プロジェクトの場合は、src/kit.tsx、src/look.tsx、src/parts.tsx、src/sequence.tsx、src/backdrop.tsx、src/library/をコピーします。

ファイル内容
src/brand.ts製品:名前、URL、ロゴ(public/内)、アクセントカラーとアラートカラー、スタイル、独自フォントがある場合はそのフォント
src/look.tsx8つのスタイルと4つのフォーマット、およびuseLook()(すべてのパーツがこれらを読み取る)
src/Video.tsx、src/Promo.tsxビデオ:順序と長さを持つシーン、およびサウンドキュー
src/scenes/テイクベースのシーン。takes.tsはテイク内の位置を示す
src/library/コンポーネントライブラリ、アイテムごとに1フォルダ。CATALOG.mdはプロップとともにリストする
src/sequence.tsx、src/backdrop.tsxScenesはトランジションでシーンを結合、Backdropはスタイルのページを描画
src/parts.tsxショットの上に配置されるもの:Caption、Tap、Callout、Speed、Pop
src/kit.tsx3Dキットとカメラの動き(references/camera.md)
public/takes/録画。ユーザー自身のものに置き換える
scripts/take.shはテイクを録画、scan.mjs(npm run scan)は録画を読み取り、sfx.mjsとmusic.mjsはサウンドを作成、voice.mjsはナレーション、library.mjsはカタログを再構築、check.mjs(npm run check)はレンダリングを測定、web.mjs(npm run web)はアップロード用コピーを作成

Remotionは個人および3人以下の企業では無料です。それ以上の企業は会社ライセンス(remotion.pro)が必要です。該当する場合は一度ユーザーに伝えてください。

2. 計画

まず製品のウェブサイトを読み、次にこれらをユーザーと調整します。推測できないことだけを尋ねます。

  • 再生場所:フォーマットと長さを決定します。必要なすべてのフォーマットをレンダリングし、メインのフォーマットでデザインして残りを確認します。

    フォーマットコンポジションサイズ対象長さ
    landscapeVideo1920×1080YouTube、X、LinkedIn、ウェブサイト、プレゼンテーションローンチ 45~90秒
    verticalVertical1080×1920Reels、TikTok、YouTube Shorts、Stories15~35秒
    squareSquare1080×1080X、LinkedIn、Instagramのフィード15~45秒
    portraitPortrait1080×1350InstagramとLinkedInのフィード(4:5)15~45秒

    フィードはミュートで再生されます。言葉がストーリーを伝え、最初の2秒で独自に引き込む必要があります。

  • スタイル。 すべてのスタイルで1フレームをレンダリングし(npm run styles、別のフレームやフォーマットの場合は--props='{"frame":420,"format":"vertical"}'を追加)、ユーザーに表示し、brand.styleを設定します。ブランドから提案します:ダークな開発者ツール → midnightまたはterminal、コンシューマーアプリ → softまたはbold、プレミアムまたは落ち着いた製品 → editorialまたはswiss、ティーザー → cinema、クリエイティブまたはクラフト的な製品 → paper。

    スタイル見た目
    editorial明るい紙、イタリックのアクセントフレーズ付きセリフ見出し、ハードカット。落ち着いていて高級感:Termaryビデオ
    midnightほぼ黒でアクセントが光り、タイトなサンセリフ、フォーカスにぼやける言葉、ズームトランジション
    boldページとしてのアクセント、巨大な太字タイプ、ブロックから打ち抜かれたアクセントフレーズ、弾むようなポップ、スライド
    swissオフホワイト、カラムグリッド上の黒字、アクセントは控えめに使用、正方形カード、ハードワイプ
    softアクセントのパステルカラー、丸みを帯びたタイプ、ピル上のアクセントフレーズ、弾むようなポップ、丸いリビール
    terminalすべて等幅、カーソル付きでタイプされる見出し、スキャンライン、グリッチカット
    cinema予告編:ほぼ黒、大きな静かなセリフ、フィルムグレイン、黒を介したスローフェード
    paperコードで描画:柔らかいラベンダーページ上の紙カード、ボールドアクセント付きの軽いセリフ、カードフリップ
  • 視聴者が覚えるべき一言、それを証明する製品の実際の瞬間、エンドカードのお願い(URL、ダウンロード、ウェイトリスト)。

  • 映像の出所。 UIのある製品は実際の映像が最適です。あなたが録画するか、ユーザーが録画するか、ユーザーがすでに持っています(上の表に読むべきものが記載されています)。製品にアクセスできない場合、またはティーザーや説明ビデオの場合は、ライブラリから構築します。

次に、シーンを順番に書きます:痛み(フック、ロゴは決して入れない)、製品(ビートに合わせてロゴ)、証拠(実際の瞬間、または機能、指標、before/after)、お願い(エンドカード)。その他のアジェンダは、独自の中間部で形状を維持します(references/agendas.md)。画面上には同時に最大7単語、1単語あたり1秒+0.3秒保持します。ブリーフをVideo.tsxの先頭にコメントとして記述します。

3. 映像

どのように来たとしても、同じことが映像を使いやすくします:ホールド(各アクションの前後で4~5秒の状態:そこからショットがカットされます)、実際の製品(デモモodeの定型結果は決して使わない、プライベートデータは使わない)、およびそこから読み取った時間。npm run scanは任意の録画を読み取ります:ホールド、変更、サウンド、フレームシート付き。これにより、誰も説明したことのない映像から計画を立てることができます。これらの時間がショットが再生されるatの値です。

4. シーンを構築

シーンはフレームを埋めるコンポーネントです。Video.tsx(またはPromo.tsx)のSCENESは、長さとともにシーンをリストします。スタイルのトランジションがシーンを結合し、シーンは独自のトランジションを指定できます(transition: 'iris'、それへのトランジション)。フレーム全体を動かす各トランジション(スライド、ホイップ、ズーム)の下で、ウーッという音が再生されます。

ライブラリ(src/library/)には、すべての既製のパーツが1フォルダずつ含まれています:テンプレート(シーン全体)、テキストエフェクト、グラフィックス、描画、ナレーションパーツ、背景、トランジション。構築する前にsrc/library/CATALOG.mdを読んでください:各アイテムの概要、そのまま動作する使用法、およびプロップ。ライブラリからインポートします(import {Stat, Statement} from './library')。すべてのアイテムはuseLook()を介してスタイルを読み取り、start(シーンの開始からのフレーム)と、必要に応じてexitを受け取ります。npm run galleryは各アイテムのサンプルをコード付きでレンダリングします(--props='{"only":"graphics","style":"bold","format":"vertical"}'で絞り込み)。

テンプレートはシーン全体であるため、直接SCENESに入ります:

{name: 'Features', seconds: 4.5, component: () => (
  <Features title="Everything in" accent="one window." items={[{icon: Columns3, title: 'Split panes', text: '…'}]} />
)},

録画からのシーンは、Captionの下でウィンドウ、ペイン、または電話を3Dで浮かべ、カメラがその上を移動します:references/camera.md。

ライブラリをうまく使う。

  • Metric、Stat、Quoteは、許可を得た実際の数字と実際の引用のみを使用します。
  • 描画はブランドカラーに色合いを調整します:クラフト的で人間味のある雰囲気のために、そしてpaperで。
  • ナレーション: npm run voice -- script.txt nameは、MacまたはWindowsの組み込み音声(または録音済みWAV)を使用してスクリプトをpublic/voice/name/とsrc/voice/name.tsに読み上げます。Voiceoverがそれを再生し、voiceTiming/voiceEndがシーンをそれに合わせてタイミング調整し、CaptionsとWaveformがそれに従います。フィードはミュートで再生されます:ナレーション付きビデオでもキャプションが必要です。組み込み音声は下書き用です。公開ビデオの場合は、人を録音するか、ユーザーが権利を持つ音声を使用します。
  • カタログがWebGLシェーダーと呼ぶトランジションはアクセントのみです。最終レンダリングのすべてのフレームをその周辺で確認します。
  • ビデオが発明したものを還元する。 別のビデオで使用できるレイアウト、チップ、または動きは、プロジェクトのライブラリのアイテム(コンポーネント、<name>.demo.tsxのサンプル、item.jsonを含むフォルダ、次にnpm run library)になり、ユーザーにdolly自身のライブラリにも追加するよう提案します。

1つのプロジェクトに複数のブランド(クライアント用のバリエーション、または製品ごとに1つのビデオ):<LookProvider style="soft" brand={{name, url, logo, accent}}>が内部のすべてに設定され、useBrand()がブランドを読み取ります。

すべてのフォーマット。 シーンはuseLook()からフレームを読み取ります:look.safe(プラットフォームが独自のボタンで覆うインセット:テキストを内部に保つ)、look.band(上部のキャプションバンド)、look.aim(focusOnに渡す)、look.size(見出しサイズ)、look.tall、およびbyShape(look, {wide, tall, square})でレイアウトを選択します。

5. センス

どのスタイルでも高級感を出すためのポイント:

  • 製品独自の外観。 そのアクセント、フォント(brand.fonts)、ロゴ、それに合ったスタイル。
  • すべてのショットに見出し、 上部のバンドに、アクセントフレーズをスタイルに合わせて設定。
  • 実際のものを、近くで切り取る。 ウィンドウ全体、フローティングカードとしての単一ペイン、Macの隣の電話。シーンはしばしば2つまたは3つのカットで構成され、キャプションはカットとともに変化します。プッシュインが向かう周囲をタイトにクロップします。
  • 入力を表示する。 何かがタップされた場所にTap、重要なものの周りにCalloutまたはSpotlight、テンプレート上のCursor、映像が高速再生されているときはいつでもSpeedチップ。
  • すべてのターンにサウンド、そしてほとんど他には何も。 ストーリーが転換する各瞬間にpublic/sfx/ting.wavを、それが読み取れるフレームに(次のバーラインではなく);タップ時にclick.wav;フレーム全体の移動下でのみwhoosh.wav(ビデオは移動するトランジション(スライド、ホイップ、ズーム、フリップ)の下で1つ再生、最大8秒に1回)、ビデオあたり約2つ。エフェクトは10秒あたり約5つに抑え、他のカットは音楽に任せます:ユーザーのライセンス済みトラック、またはnpm run music -- <seconds>。
  • 生成デザインの兆候を避ける: グラデーションテキスト、紫から青へのグラデーション、暗い背景にシアン、すべて同じカード、すべての単語にエフェクト、1つのビデオに5つのトランジション。アイデアごとに1つのエフェクト、ビデオごとに1つのトランジションスタイル(プラス1つのアクセント)、スタイルのデフォルトを最初に使用。

動きのルール。 すべてのショットをこれらに対して確認します。

  1. オブジェクトではなくカメラを動かす。 ショットごとに1つのカメラパス。奥行きが視差を与える。
  2. ショットごとに1つの動き、理由がある:明らかにする、追従する、または重要なものに向かって押し込む。
  3. 読みやすいようにフラットに。 読むテキストがある間、カメラに直面し、ゆっくり動く。
  4. すべてをイージングする。 ease.outで到着、ease.inで去る(より速く)、ホールド間はease.inOut。スタイルが弾む場合、またはロゴでのみバウンス。
  5. 決して止まらない。 すべてのショットにゆっくりとしたドリフトを与える(useShotの第2引数)。
  6. 読むのに十分な長さホールドしてからカット。 迷ったら、より長くホールドし、次のシーンを短くする。
  7. ビートに合わせてカット(120 BPMで0.5秒)、カット全体で動きの方向を維持する:シーンは次のシーンが到着する方法で去る。
  8. 抑制。 製品が主役:10秒あたり最大1つの派手な動きまたはエフェクト。

トップローンチビデオが達成する数値(フレームごとに測定):画像は0.1秒以内に動き、最初の単語は0.4秒までに読める;製品は全体の1/4までに画面に表示される;長いショット内でも約0.7秒ごとに何かが変化する;読まれているテキストは1フレームあたり約3ピクセル未満で動く;主要な主張に1~1.6秒のデザインされたホールド1つ、他の静止は0.8秒以上なし;最大の瞬間は実行時間の約80%、その後約2秒の落ち着いたエンドカード。

references/gotchas.mdにはトラップがあります:3Dを平坦にするもの、フレームごとのレンダリングを壊すもの、バンドルされたffmpegの制限。

6. 確認

npx remotion still Sheet out/sheet.png                                          # ビデオ、1フレーム/秒
npx remotion still Sheet out/focus.png --props='{"scene":"NeedsYou","every":6}' # 1シーン、5フレーム/秒
npx remotion still Sheet out/v.png --props='{"format":"vertical","guides":true}' # 別のフォーマット、セーフエリア描画
npx remotion still Vertical out/f140.png --frame=140                            # 1フレーム、フルサイズ
npm run styles && npm run formats                                               # すべてのスタイル/フォーマットで1フレーム

すべてのPNGを読み取ります。以下を確認します:

  • 最初の2秒は、音声やコンテキストなしで意味をなすこと;
  • 読み取り可能なものはすべてカメラに対して正方形で、ホールドされていること(連続したいくつかのほぼ同一のセル);
  • テキストはすべてのフォーマットで破線のセーフエリア内にあり、被写体は点線の間にあること;
  • 重要なものがフレーム端で切り取られたり、近くのレイヤーの後ろに隠れたり、キャプションの下にあったりしないこと;
  • 空白またはミラーリングされたフレームがないこと(内部または後ろのカメラ);
  • 隣接するセル…

関連スキル