compose について
録画素材を完成したデモやプロモーション動画にまとめるスキルです。Remotion によるレンダリングのレイアウト、テンポ、エフェクト、ビジュアルプリセットを定めます。
主な機能
- 01単一または並列のクリップ配置
- 02再生速度と画質の設定
- 03タイトルカード、章、キー入力表示の追加
- 04ビジュアルプリセットとエフェクト段階の選択
- 05ヘルパースクリプトによる動画レンダリング
活用シーン
- 01機能デモ動画の作成
- 02変更前後の動作比較
- 03製品ページ向け動画の作成
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ factory-ai/ factory-plugins --skill composeインストール後、Claude Code で/composeを入力して読み込まれたか確認します。
詳細
Compose
このアトムは、動画制作パイプライン全体を担います。capture ステージから生の出力を受け取り、完成度の高い単一の成果物を作成します。以下のパイプラインに沿って、手順どおりに進めてください。
Inputs
コマンドステージまたはキャプチャステージから、次の2つのセクションを含む引き継ぎ情報が提供されます。
Mechanical (structured)
- clips:生の録画ファイルへのパス(
.cast、.mp4、.webm)。静止画はクリップではありません。「Screenshot-only artifacts」を参照してください - driver:tuistory | true-input | agent-browser | cua-driver
- layout:
single|side-by-side - labels:各クリップに表示するテキスト(例:「BEFORE (dev)」、「AFTER (PR)」)
- speed:合成時に各クリップに1回適用する再生速度倍率(デフォルトは1x)
- fidelity:
compact|standard|inspect(任意。省略時は、side-by-side=inspect、single=standard) - title:タイトルカードに表示するテキスト
- subtitle:1文の要約
- sections:章のテキストバナー
[{t, title}](任意) - keys:キー入力イベント
[{t, label, dur?}](オーバーレイを使用する場合) - showcase:プリセット名 --
macos、minimal、hero、presentation、factory、factory-hero - effects tier:
utilitarian|full|none(下記の「Choosing effects at compose time」を参照) - output:出力先として希望するパス
Creative (natural language)
何を強調するかについての自由形式のガイダンスです。どの場面を長く見せるか、タイトルカードで何を伝えるか、フェーズカードを挿入するか、不要な時間をどうトリミングするかを指定します。これとエフェクトのティアに基づいて、適用する具体的なエフェクトの選択を含む編集上の判断を行ってください。
Pipeline
1. Build props → construct the Showcase JSON props
2. Render → render-showcase.sh (converts .cast, stages clips, probes duration, renders, cleans up)
3. Finalize → verify and output
Remotionは、タイトルカード、トランジション、ウィンドウの装飾、背景、キー入力オーバーレイ、スポットライト、パーティクル、ノイズ、カラーグレーディングをすべて自動処理し、1回のパスで合成します。props JSONを作成すれば、あとはエンジンが処理します。
Remotion project & helper script
REMOTION_DIR=${DROID_PLUGIN_ROOT}/remotion
RENDER=${DROID_PLUGIN_ROOT}/scripts/render-showcase.sh
Showcase mode vs Demo mode
どちらも同じRemotionパイプラインを使いますが、対象とするビジュアルの方向性は異なります。
| Showcase | Demo | |
|---|---|---|
| Goal | 映画のように高品質なマーケティング素材 | 明快で実用的なデモ — ストーリーに応じて、単一表示または比較表示 |
| Preset | factory、factory-hero、またはhero | macos、minimal、またはpresentation |
| Effects tier | Full -- スポットライト、ズーム、コールアウト、キー入力オーバーレイ。思い切って使ってください。 | Utilitarian -- 見やすさのためのズーム、ユーザー操作を示すキー入力オーバーレイ |
| Audience | 外部向け — ランディングページ、ソーシャルメディア、マーケティング | 内部向け — PRレビュー、ドキュメント、QA |
判断基準:動画をエンジニアリングチーム外の人が見る場合は、Showcaseモードを使ってください。PRの説明、社内デモ、ドキュメントへの埋め込み用であれば、Demoモードを使ってください。ビジュアルの仕上げレイヤー(暖かな輝き、パーティクル、カラーグレード、モーションブラー)は常に適用されますが、その強さはパレットによって決まります。Factoryプリセットは豊かで映画のような暖かさを生み、Catppuccinプリセットは控えめでクールな印象を保ちます。
Choosing effects at compose time
コマンドステージでは、effects tier(utilitarian、full、none)が決定されています。実際の録画を確認したうえで、具体的なエフェクトを選択してください。
- Utilitarian:小さくて読みにくいテキストにはズームエフェクトを追加します。ユーザー操作が記録されている場合は、キー入力オーバーレイを追加します。画面上で本当に見つけにくいものがある場合を除き、スポットライトとコールアウトは省略してください。
- Full:すべてのエフェクトを使います。重要な証拠となる箇所にスポットライトを当てます。細部にズームします。UIだけでは説明が不十分な箇所には、コールアウト注釈を追加します。全編を通してキー入力オーバーレイを重ねます。映画のような仕上がりを目指してください。視聴者を導き、画面を探し回らせないようにします。
- None:propsに
"effects": []を渡します。別途指定されている場合は、キー入力オーバーレイを使用してもかまいません。
ステップ 1:画質と再生速度を選ぶ
render-showcase.sh は、fidelity が省略された場合、横並びレイアウトでは inspect を、単一クリップのレイアウトでは standard を選択します。上書きするには、compact、standard、inspect を(props 内で、または --fidelity を使って)指定してください。画質を解決するのはここだけです。
| 画質 | デフォルトの出力サイズ | Remotion のエンコード | 仕上げのオーバーレイ | 最適な用途 |
|---|---|---|---|---|
compact | 1920x1080 | H.264 CRF 21、JPEG フレーム | 粒子感+カラーグレーディングを全面適用 | 小さな埋め込み |
standard | 1920x1080 | H.264 CRF 18、JPEG フレーム | 粒子感を抑えてカラーグレーディング | 1 パネルのデモ |
inspect | 2560x1440 | H.264 CRF 14、PNG フレーム | 粒子感を最小限にしてカラーグレーディング | 横並びの比較/小さなテキスト |
.cast の変換動作
render-showcase.sh は、Remotion のレンダリング前に .cast 入力を agg -> gif -> ffmpeg -> mp4 の順に変換します。アスキーキャスト固有の cols/rows と固定のフォントメトリクスを使うため、各画質プロファイルで要素の位置が安定します。変換は 1x で実行され、agg のアイドル時間圧縮は無効です。そのため、mp4 には録画のタイムラインがそのまま保持されます(最終フレームでの agg による 3s の静止を含みます)。speed は .mp4/.webm のクリップと同様、後でコンポジションによって適用されます。
重要:agg は ANSI の 16 色をすべて、使用するテーマのパレットで置き換えます。 レンダースクリプトでは、カスタムの Droid CLI テーマを使用します。手動で agg を実行するときは、--theme を省略したり、monokai や dracula などの組み込みテーマを使用したりしないでください。
--theme フラグには、カンマ区切りの 16 進数文字列(# 接頭辞なし)を指定します。形式は bg,fg,color0..color7(10 個の値)、または bg,fg,color0..color7,color8..color15(明るい色のバリエーションを含む 18 個の値)です。
注:Droid CLI の tuistory 録画では、通常、色のエスケープコードは一切出力されません。CLI は Ink の直接レンダリングを使用しており、キャスト出力に標準の ANSI SGR シーケンスが生成されないためです。出力に影響する色は、テーマの bg(最初の値:181818)と fg(2 番目の値:e0d0c0、温かみのある白)のみです。この温かみのある白の fg によって、デフォルトのテーマで生じる冷たい青みがかったグレーの印象を避けられます。
ANSI カラーコードを出力する他のターミナルでは、そのターミナルの実際のカラー設定から完全なテーマ文字列を作成してください。
再生速度:速度倍率ではなく、最終動画の長さを目標にしてください。むやみに倍率を適用すると、テキストが読めなくなったり、何も起きない時間が生じたりします。
| デモの種類 | 目標時間 | 理由 |
|---|---|---|
| 単一機能、3~5 ステップ | 30~45s | 視聴者が一息で全体を見られます |
| 変更前/変更後の比較、横並び | 45~75s | 各パネルの内容が伝わる時間が必要です。静止と動作の対比にも間を取る必要があります |
| 複数フェーズまたは複雑なフロー | 60~120s | フェーズカードが視聴者に切り替えの区切りを与えます。急がせると目的が損なわれます |
目標時間は、クリップに 7.5s のカード(タイトル 4s、アウトロ 3.5s。再生時間のチェックポイントを参照)を加えた最終動画の長さです。目標に合わせて speed プロパティを設定してください。目標が 60s の場合、クリップには約 52s を割り当てられるため、元の録画が 3 分なら "speed": 3.5 が必要です。元の録画がすでに 40s なら、"speed": 1 にするか、何も起きない時間をトリミングしてください。まずトリミングし、その後で速度を上げてください。asciinema cut を使うかセグメントに分割して、.cast から LLM の思考中の間、ビルド待ち、ネットワーク遅延を削除し、それでも目標時間を超える場合にのみ、穏やかに速度を上げます。
オーバーレイのタイミング境界:props 内のすべてのオーバーレイ時刻(keys[].t、sections[].t、effects[].t/dur、codeAnnotations[].t/dur)は、コンテンツ開始からの出力タイムライン上の秒数です。コンポジションが speed を適用するのはクリップのみで、オーバーレイの時刻には適用しません。キャプチャログの時刻は元の録画の秒数なので、props に記述する前に各タイムスタンプを速度倍率で割り、トリミングした先頭部分があればその分を差し引いてください。3x 動画で元の録画時刻が t=6.0s のキー入力は、t=2.0s になります。
.cast 以外のクリップ
.mp4 と .webm のクリップは変更せずにステージングされ、変換済みのキャストと同様に speed で再生されます。ピクセル形式または寸法が無効な場合に限り、手動で再エンコードしてください。.png ファイルはクリップとして受け付けません。静止画は後述の「スクリーンショットのみの成果物」に配置してください。
クリップのアスペクト比(ブラウザーキャプチャでは必須チェック)
デフォルトの 1920×1080 出力と工場出荷時のプリセット余白では、パネルはおよそ次のサイズになります。
| レイアウト | パネルのアスペクト比 |
|---|---|
single | 約1760×920(≈16:9の横長) |
side-by-side | パネルごとに約872×920(≈8:9、ほぼ正方形/やや縦長) |
.cast の変換では、パネルのアスペクト比に合わせて自動調整されます。事前録画した .mp4/.webm クリップでは調整されません。クリップのアスペクト比がパネルと一致しない場合、デフォルトの objectFit: "contain" ではレターボックス表示になり、"cover" では切り抜かれます。
よくある落とし穴:ブラウザーキャプチャは通常、16:9の横長です(例:1280×720)。これを side-by-side レイアウトに入れると、上下に大きな黒帯ができ、細長く表示されます。
優先順に、次の2つの対処方法があります。
- パネルに適したビューポートで再キャプチャする — キャプチャの段階に戻り、
side-by-sideでは約960×1000、singleでは約1280×720にビューポートを設定します。 - props に
"objectFit": "cover"を渡す — クリップの端を切り抜いてパネルを埋めます。関連する UI が中央にあり、端が切れても問題ない場合は許容できます。切り抜かれたコンテンツが重要な場合(例:サイドバー UI が切れる場合)は適切ではありません。
.cast クリップは、描画時のアスペクト比が列数と行数から決まるため、この調整が必要になることはほとんどありません。ほぼ常にブラウザーキャプチャで考慮すべき点です。
長さのチェックポイント(続行前に必須)
予定している速度係数で、最終的な長さがペース配分表の目標範囲に収まるか確認します。
final_duration = 4s title + longest_clip_duration / speed_factor + 3.5s outro
これは remotion/src/lib/duration.ts がコンポジションに設定する正確な長さです(フレームは30fpsで整数に切り上げられます)。コンテンツシーケンスには、0.5秒のクロスフェードが両方に含まれるよう余白があります。タイトルのクロスフェードは再生前に行われ、アウトロのクロスフェードはフレーム単位に丸められた再生区間の後に始まり、保持されたフレームを表示します。ウィンドウのクローム自体の0.5秒の表示アニメーションは、再生開始後の最初の0.5秒と重なります。そのため、録画は安定した状態から始めてください。クロスフェードの長さよりクリップが短くなる場合も含め、有限の正の値であればどの speed も有効です。
クリップは最も長いものに合わせて再生されます。短いクリップは最後のフレームを保持し(ループはしません)、シーケンスの終了まで表示されます。比較の場合、両方のクリップが同じタイミングで終わるように録画してください。そうしないと、一方のパネルが静止したまま、もう一方だけが再生され続けます。
| final_duration が…の場合 | 対応 |
|---|---|
| 目標範囲内 | 続行します |
| 最小値を下回る | 目標を満たすまで速度係数を下げてください。1xでもクリップが最小値に届かない場合、録画が短すぎます。キャプチャに戻り、操作手順を追加してください。 |
| 最大値を上回る | まず不要な時間をトリミングし(asciinema cut)、次に speed prop を大きくします |
このチェックポイントは省略できません。目標範囲外の長さになった動画は検証に不合格となります。
ステップ2:props を作成する
レイアウトを選択する
デフォルト:single。 目標/最終状態のクリップを1つ使用します。新機能、バグ修正の証明、ウォークスルー、README のヒーロー動画はすべてこのレイアウトにします。
side-by-side は、ストーリーの本質が比較である場合に限り使用します。たとえば、リグレッション(不具合ありと修正後)、動作を維持したリファクタリング、またはユーザーから明示的に求められた場合です。side-by-side にする理由を作るために、「変更前」のクリップを捏造してはいけません。
showcaseSchema JSON を一時ファイルに保存します。
DEMO_TMP="$(mktemp -d /tmp/droid-demo-XXXXXX)"
PROPS="${DEMO_TMP}/showcase-props.json"
cat > "$PROPS" << 'EOF'
{
"clips": ["demo.cast"],
"layout": "single",
"labels": [],
"speed": 3,
"title": "PR #11621 — Prevent session freezes",
"subtitle": "Bash Mode blocks interactive commands and supports ESC cancellation",
"preset": "factory",
"keys": [
{"t": 2.0, "label": "vim"},
{"t": 5.5, "label": "sleep 100"},
{"t": 8.0, "label": "Esc"}
],
"sections": [],
"effects": [],
"speedNote": "3x speed",
"windowTitle": "droid demo"
}
EOF
比較する場合は、"clips" を2つのパスに、"layout" を "side-by-side" に変更し、"labels" に値を設定します(例:["BEFORE (main)", "AFTER (PR #11621)"])。
$PROPS のような実行ごとの props パスを使用してください。再レンダリングや複数のデモの同時実行で、グローバルな /tmp/showcase-props.json を使い回さないでください。
clipDuration はレンダースクリプトが管理します。 ffprobe ですべてのクリップを調べ、ソースの秒数で最長の長さを書き込みます。コンポジションではこれを speed で割ります。手動で設定しないでください。動画を短くするには、ソースクリップをトリミングしてください。
Props リファレンス
| Prop | Type | Required | Description |
|---|---|---|---|
clips | string[] | はい | レンダリングスクリプトによって、コマンドラインの順序でステージング済みパスに上書きされます。位置指定のクリップ引数が正となる情報です |
layout | "single" | "side-by-side" | はい | 合成レイアウト |
labels | string[] | はい | 各クリップのラベル(side-by-side で表示されます。single の場合は [] を渡します) |
fidelity | "compact" | "standard" | "inspect" | いいえ | 出力品質/圧縮プロファイルです。省略すると、レンダリングスクリプトがレイアウトに応じて選択します。 |
speed | number | いいえ | 合成によってすべてのクリップに一度適用される再生倍率です(デフォルトは 1)。オーバーレイの時間はスケーリングされません。 |
title | string | はい | タイトルカードの見出し |
subtitle | string | はい | タイトルカードのサブ見出し |
preset | preset name | はい | ビジュアルプリセット。下の表を参照してください |
keys | Keystroke[] | はい | キーストロークのオーバーレイイベント(なしの場合は [] を渡します) |
sections | Section[] | いいえ | チャプターを示すセクションバナー(なしの場合は [] を渡します) |
effects | Effect[] | はい | エフェクトのタイムライン(なしの場合は [] を渡します) |
clipDuration | number | いいえ | ソースの秒数で表した最長クリップ。レンダリングスクリプトによって設定されます。手動で記述しないでください。 |
speedNote | string | いいえ | タイトルカードに表示されます(例:"3x speed") |
windowTitle | string | いいえ | ウィンドウのタイトルバーに表示するテキスト |
width | number | いいえ | 出力幅(デフォルト:inspect の場合は 2560、それ以外は 1920) |
height | number | いいえ | 出力高(デフォルト:inspect の場合は 1440、それ以外は 1080) |
objectFit | "contain" | "cover" | "fill" | いいえ | 各クリップをパネルに合わせる方法です。デフォルトは "contain"(アスペクト比を維持するためにレターボックス表示)。クリップのアスペクト比がパネルと一致せず、黒帯よりもクロップを選ぶ場合は "cover" を使用します。「クリップのアスペクト比」を参照してください。 |
codeAnnotations | CodeAnnotation[] | いいえ | メインコンテンツのシーケンス中に表示される、タイミング指定付きの構文強調コードオーバーレイです。「コード注釈」を参照してください。 |
transitionStyle | "motion-blur" | "flash" | "whip-pan" | "light-leak" | "glitch-lite" | いいえ | タイトルからコンテンツ、およびコンテンツからアウトロへのトランジションに使用する演出です。デフォルトの "motion-blur" は既存の美しさを維持します。「トランジションスタイル」を参照してください。 |
プリセット早見表
| Preset | Look | Palette | Best for |
|---|---|---|---|
factory | 暖色系の黒い背景、信号機、12px の角丸、80px の余白 | Factory(暖色系) | Factory の公式コンテンツ |
factory-hero | factory と同じ+グラデーション背景 | Factory(暖色系) | Factory のランディングページ、ソーシャルメディア |
hero | グラデーション背景、広めの余白、目立つシャドウ | Catppuccin(寒色系) | Factory 以外のマーケティング |
macos | 暗い背景、信号機、すっきりしたフレーム | Catppuccin(寒色系) | 汎用デモ |
presentation | 黒い背景、広めの余白 | Catppuccin(寒色系) | スライド資料、講演 |
minimal | ウィンドウバーなし、小さな角丸、狭い余白 | Catppuccin(寒色系) | ドキュメントへの埋め込み、インラインクリップ |
キーストロークのスキーマ
{ t: number, label: string, dur?: number }
t:クリップ開始からの相対時間(タイトルカードは含みません)。速度係数に合わせて調整してください。label:表示テキスト(例:"Ctrl+C"、"vim main.rs")dur:表示時間(秒、デフォルト:1.2s)。次のキーストロークが始まると自動的にカットされます。
セクションのスキーマ
{ "t": 2.0, "title": "Testing basic echo" }
t:クリップ開始からの相対時間(タイトルカードは含みません)。速度係数に合わせて調整してください。title:セクション見出しの表示テキスト。次のセクションが始まるまで表示されます。
エフェクトの種類
| エフェクト | プロパティ | 説明 |
|---|---|---|
fade-in | t, dur | 黒からフェードインします(スキーマ上は有効ですが、Showcase ではまだレンダリングされず、レンダリング時に警告が出ます) |
fade-out | t, dur | 黒へフェードアウトします(スキーマ上は有効ですが、Showcase ではまだレンダリングされず、レンダリング時に警告が出ます) |
zoom | t, dur, to: {x,y,w,h} | 指定した領域へズームします(30% で拡大、40% で維持、30% で縮小) |
spotlight | t, dur, on: {x,y,w,h}, dim? | 領域以外を暗くします(dim:0~1、デフォルトは 0.6) |
callout | t, dur, text, at: {x,y} | ポイントに固定されたテキストオーバーレイです |
領域には、動画の寸法を基準としたパーセント文字列(例:"25%")を使用します。
エフェクトを使う場面
| エフェクト | 使う場面… | 使わない場面… |
|---|---|---|
spotlight | 特定の領域(エラー、ステータスの変化など)に注意を引きたいとき | フレーム全体が重要なとき |
zoom | 小さな文字や細部が、全体表示では読みにくいとき | コンテンツがすでに読みやすいとき |
callout | 視聴者が認識できない可能性のあるものに注釈を付けるとき | UI だけで内容が明らかなとき |
| キーストロークオーバーレイ | ユーザーの操作(入力、キー押下など)を示すとき | クリップ内にユーザー操作がないとき |
少ないほど効果的です。 タイミングよく使うスポットライトは、重ねた 5 つのエフェクトよりも大きな効果があります。
コード注釈
キャプチャした動画に重ねる、タイミング指定付きのシンタックスハイライト済みコードカードです。決定的なソースコードの変更を実行時の証拠の隣に表示する必要がある PR デモで使用します。
| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
t | number | はい | クリップ開始からの相対時間(秒)。speed 倍率に合わせて調整してください(keys[].t と同じルールです)。 |
dur | number | はい | カードを表示する時間(秒)です。 |
code | string | はい | ソーステキストです。複数行には \n を使用し、末尾に改行を付けないでください。 |
language | string | いいえ | Prism の言語 ID(tsx、ts、py、rust、bash など)です。デフォルトは tsx です。 |
title | string | いいえ | コードの上に表示する短いキャプションです(通常はファイルパス)。 |
highlight | [{start,end}] | いいえ | アクセントカラーの背景と左ボーダーを付ける、1 始まりの包含範囲の行番号です。 |
focus | [{start,end}] | いいえ | 不透明度を維持する、1 始まりの包含範囲の行番号です。それ以外の行は暗くするか、ぼかします。 |
position | "top-right" | "center" | "bottom-left" | いいえ | デフォルトは "top-right" です。キャプチャした映像で右上が重要な情報を含む場合は、"bottom-left" に移動してください。 |
簡潔にまとめてください。各カードは 15 行以下を目安にし、3~6 秒間表示します。
トランジションスタイル
transitionStyle は、タイトルからコンテンツ、およびコンテンツからアウトロへのクロスフェード演出を選択します。1 回のレンダリング内の両方のトランジションで、同じスタイルが使われます。flash と light-leak はプリセットのパレットから色合いを決定します。デフォルトの motion-blur は常に安全です。プリセットのティアに応じたガイダンスは showcase/SKILL.md にあります。
| スタイル | 印象 | 使う場面… |
|---|---|---|
motion-blur | 控えめなドリー移動、ぼかし+不透明度のクロスフェード | PR デモ、Factory のコンテンツ、ほとんどのショーケース制作でのデフォルト |
flash | 中間点でパレットの色合いが付いた素早いフラッシュ | 修正後の状態を突然現れたように見せたいバグ修正の証明 |
whip-pan | 水平方向のパン+モーションブラー | ペースの速い、エネルギッシュなショーケースやマーケティング |
light-leak | 暖色のグラデーションスイープ | Factory ブランドのランディングページやソーシャルクリップ |
glitch-lite | RGB チャンネルのずれ+水平バンド | セキュリティや脆弱性の証明、ターミナル風の演出。デフォルトでは使用せず、2 回続けて使用しないでください |
ステップ 3:レンダリング
レンダースクリプトを使用します。これは合成の唯一のエントリーポイントです(ステージング、正規化、長さの設定、レンダリング、クリーンアップ)。
RENDER=${DROID_PLUGIN_ROOT}/scripts/render-showcase.sh
# Basic render
$RENDER --props "$PROPS" --output "${RUN_DIR}/demo.mp4" \
"${RUN_DIR}/before.cast" "${RUN_DIR}/after.cast"
# Or with inline props (useful for simple cases)
$RENDER --props-inline '{"clips":[],"layout":"single","labels":[],"title":"Demo","subtitle":"Test","preset":"macos","keys":[],"effects":[]}' \
--output "${RUN_DIR}/demo.mp4" "${RUN_DIR}/clip.mp4"
スクリプトは次の処理を行います。
.cast、.mp4、.webmのみを受け付けます。.castは選択した忠実度プロファイルを使用し、1x で.mp4` に変換します- 今回のレンダリング専用に
${REMOTION_DIR}/public/の下に作成するディレクトリ内で、クリップをclip-<index>としてステージングします fidelity、width/height、speedを解決し、clipDurationを最長クリップの長さに設定します(ffprobe)- プロファイル固有のエンコードフラグに加え、
--pixel-format=yuv420p --color-space=bt709を指定してnpx remotion render Showcaseを実行します(色空間の指定により、ファイルの形式がyuvj420pではなく限定レンジのyuv420pに保たれます) - 終了時および失敗時に、スクリプト自身がステージングしたディレクトリを削除します。Ctrl-C を押すか、プロセスグループにシグナルを送ってキャンセルしてください。スクリプトの PID のみに送ったシグナルは、
npx remotionの子プロセスが終了してから反映されます
フレームの簡易確認(本番レンダリング前にレイアウトを確認します。正規化とステージングはレンダリング時と同じです)
$RENDER --props "$PROPS" --still 150 --output "${RUN_DIR}/check.png" "${RUN_DIR}/before.cast" "${RUN_DIR}/after.cast"
# frame 150 = 5.0s at 30fps; clips start at frame 120, after the title crossfade
レンダリング時間:1920x1080 の 30~60 秒の動画では、約 1~3 分かかります。ワーカーのタイムアウトは適切に設定してください(5 分あれば安心です)。
ステップ 4:仕上げ
結果を確認します。
ffprobe -v quiet -print_format json -show_format -show_streams "${RUN_DIR}/demo.mp4"
次の点を確認してください。
- 解像度が、解決された忠実度に一致していること:
compact/standardでは 1920x1080、inspectでは 2560x1440(side-by-sideのデフォルト)、または props で明示されたwidth/height - 長さが
4s title + longest_clip / speed + 3.5s outro(長さのチェックポイントの計算式)と一致していること - ファイルサイズが扱いやすいこと(GitHub の埋め込みでは 5 MB 未満、上限は 25 MB)
- ピクセル形式が
yuv420pで、color_space=bt709であること(あらゆる環境で再生するため)
デコードと証拠フレームの確認は verify ステージが担当します。メタデータだけを根拠に、動画を再生可能だと報告しないでください。
出力
verify ステージに渡します。
## Compose outputs
- video: /tmp/demo-pr-11621.mp4
- resolution: 1920x1080
- duration: 42s
- size: 3.2 MB
- preset: factory
- keystrokes: 3 events overlaid
- effects: 1 spotlight
- engine: remotion
スクリーンショットのみの成果物(証拠、QA)
成果物はすべて動画とは限りません。証拠の提示や QA のワークフローでは、compose はスクリーンショットやスナップショットの整理だけを行う場合があります。.png` の静止画もここに含まれます。これらがクリップとしてレンダースクリプトに渡されることはありません。
注釈付きスクリーンショット一式
ffmpeg -y -i before.png -i after.png \
-filter_complex "
[0:v]scale=960:-1[left];
[1:v]scale=960:-1[right];
[left][right]hstack=inputs=2[out]" \
-map "[out]" comparison.png
証拠を埋め込んだ Markdown レポート
テキストベースの成果物では、証拠を動画ではなく、構造化されたレポートにまとめます。これには verify ステージが対応します。