
Rendervid テンプレートシステム - JSON テンプレート、変数、アニメーション & トランジション
Rendervid テンプレートシステムの完全ガイド。JSON ビデオテンプレートの作成方法、{{variable}} 構文を使った動的変数の使用、40種類以上のアニメーションプリセット、17種類のシーントランジション、30種類以上のイージング関数の設定方法を学びます。...

Rendervidをどこにでもデプロイ:プレビュー用のブラウザベースレンダリング、サーバーサイドバッチ処理用のNode.js、またはAWS Lambda、Azure Functions、GCP、Dockerでのクラウドレンダリングにより、10~50倍高速な並列レンダリングを実現します。
Rendervidは、ワークフローが要求するあらゆる場所でレンダリングできるように設計されています。ブラウザでの即座のプレビュー、サーバーでのプロダクショングレードのビデオエンコーディング、またはクラウドインフラストラクチャ全体での大規模な並列レンダリングが必要な場合でも、Rendervidは各環境専用のパッケージを提供します。すべてのデプロイターゲットは同じテンプレートシステム とコンポーネントライブラリ を共有しているため、ブラウザで動作するテンプレートは、AWS LambdaやDockerコンテナでも同じように動作します。
このガイドでは、4つのデプロイ環境すべて、各環境で利用可能なレンダリングオプション、およびモーションブラー、GIFエクスポート、パフォーマンス最適化などの高度な機能について説明します。最後には、プロジェクトに適したデプロイパスと、その設定方法を正確に理解できるようになります。
+---------------------+
| JSON Template |
+----------+----------+
|
+--------------------+--------------------+
| | |
+--------v--------+ +-------v--------+ +-------v---------+
| Browser | | Node.js | | Cloud |
| @rendervid/ | | @rendervid/ | | @rendervid/ |
| renderer-browser | | renderer-node | | cloud-rendering |
+---------+--------+ +-------+--------+ +-------+---------+
| | |
Canvas / WebM FFmpeg / Playwright Parallel Workers
| | |
+---------v--------+ +------v---------+ +-------v---------+
| MP4, WebM, PNG, | | MP4, WebM, MOV,| | AWS Lambda |
| JPEG, WebP | | GIF, H.265 | | Azure Functions |
+------------------+ +----------------+ | GCP Functions |
| Docker |
+-----------------+
@rendervid/renderer-browserパッケージは、ユーザーのブラウザ内で完全にクライアントサイドレンダリングを処理します。サーバーインフラストラクチャは必要ありません。これにより、テンプレートからプレビューまでの最速のパスが実現されます。
npm install @rendervid/renderer-browser
ブラウザレンダリングは、HTML Canvas APIを使用してテンプレートの各フレームを描画します。レンダラーはすべてのシーンとレイヤーをウォークスルーし、アニメーションとイージング関数を適用し、結果をキャンバス要素に合成し、各フレームをキャプチャします。ビデオ出力の場合、フレームはブラウザの組み込みMediaRecorder API(WebM)またはWebAssemblyベースのMP4エンコーダーを使用してエンコードされます。
| フォーマット | 拡張子 | 備考 |
|---|---|---|
| MP4 | .mp4 | WebAssemblyエンコーダー経由のH.264 |
| WebM | .webm | MediaRecorder API経由のVP8/VP9 |
| PNG | .png | 単一フレームまたは画像シーケンス |
| JPEG | .jpeg | 単一フレーム、品質設定可能 |
| WebP | .webp | 単一フレーム、より小さいファイルサイズ |
import { BrowserRenderer } from "@rendervid/renderer-browser";
const renderer = new BrowserRenderer();
const template = {
width: 1920,
height: 1080,
fps: 30,
scenes: [
{
duration: 5,
layers: [
{
type: "text",
text: "Hello from the Browser",
fontSize: 72,
color: "#ffffff",
position: { x: 960, y: 540 },
animation: {
entrance: { type: "fadeIn", duration: 1 },
},
},
],
},
],
};
// プレビュー用にキャンバス要素にレンダリング
const canvas = document.getElementById("preview") as HTMLCanvasElement;
await renderer.preview(template, canvas);
// MP4としてエクスポート
const mp4Blob = await renderer.render(template, {
format: "mp4",
quality: "standard",
});
// 単一フレームをPNGとしてエクスポート
const pngBlob = await renderer.renderFrame(template, {
format: "png",
frameNumber: 0,
});
@rendervid/renderer-nodeパッケージは、完全なFFmpeg統合を備えたサーバーサイドレンダリングを提供します。PlaywrightまたはPuppeteerを使用してヘッドレスブラウザで各フレームをレンダリングし、フレームをFFmpegにパイプしてプロフェッショナルグレードのビデオエンコーディングを行います。
# レンダラーをインストール
npm install @rendervid/renderer-node
# Playwrightをインストール(ブラウザバイナリを含む)
npx playwright install chromium
# FFmpegをインストール(ビデオエンコーディングに必要)
# macOS
brew install ffmpeg
# Ubuntu/Debian
sudo apt-get install ffmpeg
# Windows(Chocolatey経由)
choco install ffmpeg
| フォーマット | 拡張子 | コーデック | 備考 |
|---|---|---|---|
| MP4 | .mp4 | H.264 | 普遍的な互換性 |
| MP4 | .mp4 | H.265/HEVC | 50%小さいファイル、新しいデバイス |
| WebM | .webm | VP8/VP9 | Web最適化 |
| MOV | .mov | ProRes | プロフェッショナル編集ワークフロー |
| GIF | .gif | パレットベース | 最適化されたアニメーション |
| PNG | .png | ロスレス | 画像シーケンスまたは単一フレーム |
| JPEG | .jpeg | 非可逆 | 品質設定可能 |
| WebP | .webp | 非可逆/ロスレス | モダンなWebフォーマット |
Rendervidは、エンコーディングパラメータを制御する4つの品質プリセットを提供します:
| プリセット | ビットレート | 使用例 |
|---|---|---|
draft | 低 | 開発中の高速プレビュー |
standard | 中 | 汎用出力、良好な品質/サイズ |
high | 高 | マーケティング資料、最終成果物 |
lossless | 最大 | アーカイブ、さらなる編集、品質劣化なし |
Node.jsレンダラーは、エンコーディングをGPUにオフロードするハードウェアアクセラレーションをサポートしています。これにより、多くのレイヤー、高解像度、エフェクトを持つ複雑なテンプレートのレンダリング時間が大幅に短縮されます。
const result = await renderer.render(template, {
format: "mp4",
quality: "high",
outputPath: "/output/video.mp4",
hardwareAcceleration: true,
});
GPUアクセラレーションは、互換性のあるNVIDIA(NVENC)、AMD(AMF)、またはIntel(Quick Sync)ハードウェアを搭載したシステムで利用できます。FFmpegは、対応するエンコーダーサポートでコンパイルされている必要があります。
import { NodeRenderer } from "@rendervid/renderer-node";
const renderer = new NodeRenderer();
const template = {
width: 1920,
height: 1080,
fps: 60,
scenes: [
{
duration: 10,
layers: [
{
type: "video",
src: "/assets/background.mp4",
fit: "cover",
},
{
type: "text",
text: "{{headline}}",
fontSize: 64,
color: "#ffffff",
fontFamily: "Inter",
position: { x: 960, y: 540 },
animation: {
entrance: { type: "slideInUp", duration: 0.8 },
exit: { type: "fadeOut", duration: 0.5 },
},
},
],
},
],
inputs: {
headline: {
type: "text",
label: "Headline",
default: "Your Product, Elevated",
},
},
};
// カスタム入力でレンダリング
const result = await renderer.render(template, {
format: "mp4",
quality: "high",
outputPath: "/output/promo.mp4",
renderWaitTime: 2000, // メディアの読み込みを2秒待機
inputs: {
headline: "Summer Sale — 50% Off Everything",
},
});
console.log(`Rendered: ${result.outputPath}`);
console.log(`Duration: ${result.duration}s`);
console.log(`File size: ${(result.fileSize / 1024 / 1024).toFixed(2)} MB`);
多くのテンプレートを順番に処理する場合は、バッチAPIを使用します:
import { NodeRenderer } from "@rendervid/renderer-node";
const renderer = new NodeRenderer();
const templates = [
{ template: socialTemplate, inputs: { name: "Alice" }, output: "alice.mp4" },
{ template: socialTemplate, inputs: { name: "Bob" }, output: "bob.mp4" },
{ template: socialTemplate, inputs: { name: "Carol" }, output: "carol.mp4" },
];
for (const job of templates) {
await renderer.render(job.template, {
format: "mp4",
quality: "standard",
outputPath: `/output/${job.output}`,
inputs: job.inputs,
});
}
単一マシンでの真の並列レンダリングについては、以下のDockerローカルレンダリングセクションを参照してください。
@rendervid/cloud-renderingパッケージは、クラウドインフラストラクチャ全体での分散並列レンダリングを可能にします。1台のマシンでフレームを順番にレンダリングする代わりに、クラウドレンダリングは作業を多くのワーカー関数に分割し、フレームを同時にレンダリングし、それらを最終出力にマージします。
+------------------+
| Your App |
| (Coordinator) |
+--------+---------+
|
| 1. ビデオをフレームチャンクに分割
v
+--------+---------+
| Chunk Splitter |
+--------+---------+
|
| 2. チャンクをワーカーに配信
v
+--------+---+---+---+---+--------+
| Worker 1 | Worker 2 | Worker N |
| (Lambda/ | (Lambda/ | (Lambda/ |
| Azure/ | Azure/ | Azure/ |
| GCP) | GCP) | GCP) |
+-----+------+----+------+----+----+
| | |
| 3. 各ワーカーがフレームをレンダリング
v v v
+-----+------+----+------+----+----+
| Frames | Frames | Frames |
| 001-030 | 031-060 | 061-090|
+-----+------+----+------+----+----+
| | |
+------+-----+-----+----+
|
v
+-------+--------+
| Merger |
| (FFmpeg concat) |
+-------+---------+
|
| 4. 最終ビデオに結合
v
+-------+---------+
| Object Storage |
| S3 / Blob / GCS |
+------------------+
|
| 5. ダウンロードまたは配信
v
+-------+---------+
| Final Output |
| video.mp4 |
+------------------+
ステップバイステップの仕組み:
import { CloudRenderer } from "@rendervid/cloud-rendering";
const cloudRenderer = new CloudRenderer({
provider: "aws", // "aws" | "azure" | "gcp" | "docker"
quality: "standard", // "draft" | "standard" | "high"
downloadToLocal: true,
outputPath: "/output/final.mp4",
});
完全な設定インターフェース:
interface CloudRenderConfig {
provider: "aws" | "azure" | "gcp" | "docker";
quality: "draft" | "standard" | "high";
downloadToLocal: boolean;
outputPath: string;
awsConfig?: {
region: string;
s3Bucket: string;
s3Prefix: string;
};
azureConfig?: {
resourceGroup: string;
storageAccount: string;
containerName: string;
};
gcpConfig?: {
projectId: string;
bucketName: string;
region: string;
};
dockerConfig?: {
volumePath: string;
workersCount: number;
};
}
AWS Lambdaは最も一般的なクラウドデプロイターゲットです。各ワーカー関数は別々のLambda呼び出しで実行され、大規模な並列処理を可能にします。
前提条件:
設定:
import { CloudRenderer } from "@rendervid/cloud-rendering";
const renderer = new CloudRenderer({
provider: "aws",
quality: "high",
downloadToLocal: true,
outputPath: "/output/video.mp4",
awsConfig: {
region: "us-east-1",
s3Bucket: "my-rendervid-output",
s3Prefix: "renders/",
},
});
const result = await renderer.render(template);
console.log(`Rendered in ${result.renderTime}ms`);
console.log(`Workers used: ${result.workersUsed}`);
console.log(`Output: ${result.outputUrl}`);
典型的なAWS Lambda設定:
const renderer = new CloudRenderer({
provider: "azure",
quality: "standard",
downloadToLocal: true,
outputPath: "/output/video.mp4",
azureConfig: {
resourceGroup: "rendervid-rg",
storageAccount: "rendervidstore",
containerName: "renders",
},
});
const result = await renderer.render(template);
const renderer = new CloudRenderer({
provider: "gcp",
quality: "standard",
downloadToLocal: true,
outputPath: "/output/video.mp4",
gcpConfig: {
projectId: "my-project-id",
bucketName: "rendervid-output",
region: "us-central1",
},
});
const result = await renderer.render(template);
| プロバイダー | 1分あたりのコスト | 1時間あたりのコスト | 備考 |
|---|---|---|---|
| AWS Lambda | 約$0.02 | 約$1.00 | 1msのコンピューティングごとに課金 |
| Azure Functions | 約$0.02 | 約$1.00 | 従量課金プラン価格 |
| Google Cloud Functions | 約$0.02 | 約$1.00 | 100msのコンピューティングごとに課金 |
| Docker(ローカル) | 無料 | 無料 | 自分のハードウェアを使用 |
すべてのクラウドプロバイダーは、開発および低ボリューム本番環境での重要なレンダリングワークロードをカバーする無料枠を提供しています。
クラウドレンダリングは、単一マシンの順次レンダリングと比較して10~50倍の高速化を実現します。正確な高速化は、ワーカー数、テンプレートの複雑さ、ビデオの長さに依存します。
| ビデオの長さ | 順次(1マシン) | クラウド(50ワーカー) | 高速化 |
|---|---|---|---|
| 30秒 | 約90秒 | 約5秒 | 18倍 |
| 2分 | 約6分 | 約15秒 | 24倍 |
| 10分 | 約30分 | 約45秒 | 40倍 |
| 30分 | 約90分 | 約2分 | 45倍 |
長いビデオは、ワーカー起動とフレームマージのオーバーヘッドがより多くのフレームに償却されるため、並列処理からより多くの恩恵を受けます。
Dockerベースのレンダリングは、クラウドレンダリングと同じ並列レンダリングアーキテクチャを提供しますが、完全にローカルマシンで実行されます。完全に無料で、クラウドアカウントを使用せず、セルフホストセットアップ、開発、クラウドコストなしで並列レンダリングを望むチームに最適です。
# Dockerがインストールされ実行されていることを確認
docker --version
# クラウドレンダリングパッケージをインストール
npm install @rendervid/cloud-rendering
import { CloudRenderer } from "@rendervid/cloud-rendering";
const renderer = new CloudRenderer({
provider: "docker",
quality: "high",
downloadToLocal: true,
outputPath: "/output/video.mp4",
dockerConfig: {
volumePath: "/tmp/rendervid-work",
workersCount: 8, // 並列実行するDockerコンテナの数
},
});
const result = await renderer.render(template);
console.log(`Rendered in ${result.renderTime}ms using ${result.workersUsed} workers`);
workersCountの選択: これをマシンで利用可能なCPUコア数に設定します。たとえば、8コアマシンは8ワーカーでうまく機能します。コア数を超えると、スループットを改善せずにコンテキストスイッチングのオーバーヘッドが追加されます。
+------------------+
| Coordinator |
| (your process) |
+--------+---------+
|
+-----+-----+-----+-----+
| | | | |
+--v--+ +--v-+ +-v--+ +-v--+
| C1 | | C2 | | C3 | | C4 | ... Dockerコンテナ
+--+--+ +--+-+ +-+--+ +-+--+
| | | |
v v v v
+--+------+-----+------+--+
| Shared Volume |
| /tmp/rendervid-work |
+-------------+-------------+
|
v
+-------+--------+
| Merger |
+-------+---------+
|
v
+-------+---------+
| /output/video |
+-----------------+
各Dockerコンテナは、Node.js、Playwright、FFmpegがプリインストールされた自己完結型ワーカーです。ワーカーは共有ボリュームからフレーム割り当てを読み取り、フレームをレンダリングし、結果を書き戻します。コーディネーターは、すべてのセグメントを最終出力にマージします。
Rendervidは、時間的スーパーサンプリングによるモーションブラーをサポートしています。フレームごとに単一の瞬間をレンダリングする代わりに、レンダラーは時間的にわずかに異なるポイントで複数のサブフレームをキャプチャし、それらをブレンドします。これにより、オブジェクトが露出中に動いたときにカメラが作成する自然なブラーが生成されます。
| プリセット | フレームあたりのサンプル数 | レンダリング時間倍率 | 視覚品質 |
|---|---|---|---|
low | 5 | 5倍 | 微妙なスムージング |
medium | 10 | 10倍 | 速い動きで目立つブラー |
high | 16 | 16倍 | 映画的なモーションブラー |
ultra | 32 | 32倍 | フィルムグレード、重いブラー |
const result = await renderer.render(template, {
format: "mp4",
quality: "high",
outputPath: "/output/cinematic.mp4",
motionBlur: {
enabled: true,
quality: "high", // フレームあたり16サンプル
},
});
フレームN(モーションブラーなし): フレームN(モーションブラーあり、5サンプル):
単一の瞬間: 5つのサブフレームをブレンド:
+--------+ +--------+ +--------+ +--------+
| O | | O | + | O | + | O | ...
+--------+ +--------+ +--------+ +--------+
|
v
+--------+
| ~O~ | <- ブレンド結果
+--------+
各サブフレームは、アニメーションタイムラインをわずかな増分(1/fpsをサンプル数で割った値)だけ進めます。サブフレームは、最終フレームを生成するためにアルファブレンドされます。サブフレーム間で移動したオブジェクトは、その動きの経路に沿ってぼやけて表示され、静止要素は鮮明なままです。
モーションブラーは、サンプル数に比例してレンダリング時間を増やします。30fpsで10秒のビデオには300フレームあります。high品質(16サンプル)の場合、レンダラーは300フレームの代わりに4,800サブフレームを生成する必要があります。開発中はdraft品質を使用し、最終エクスポートのみhighまたはultraに切り替えてください。
クラウドレンダリングとDocker並列レンダリングは、フレームあたりのコストがワーカー間で分散されるため、モーションブラーでうまく機能します。16ワーカーに分散された16倍のフレームあたりの増加は、1台のマシンでのブラーなしレンダリングとほぼ同じ総レンダリング時間になります。
RendervidのGIFエクスポートは、単純なフレームからGIFへの変換をはるかに超えています。FFmpegのパレット生成パイプラインを使用して、設定可能なディザリング、色数、ファイルサイズ制約を備えた最適化された高品質のアニメーションGIFを生成します。
標準のGIFエンコーディングは、256色の単一グローバルパレットを使用するため、バンディングと色再現性の低下が発生することがよくあります。Rendervidは2パスアプローチを使用します:
| プリセット | 解像度 | 最大色数 | 対象使用例 |
|---|---|---|---|
social | 480x480 | 256 | Instagram、Twitter、Slack |
web | 640x480 | 256 | ブログ投稿、ドキュメント |
email | 320x240 | 128 | メールキャンペーン、ニュースレター |
| アルゴリズム | 品質 | ファイルサイズ | 説明 |
|---|---|---|---|
floyd_steinberg | 最高 | 最大 | 誤差拡散ディザリング、滑らかなグラデーション |
bayer | 良好 | 中 | 順序付きディザリング、一貫したパターン |
none | 最低 | 最小 | ディザリングなし、平坦な色領域 |
const result = await renderer.render(template, {
format: "gif",
outputPath: "/output/animation.gif",
gif: {
preset: "social", // 480x480解像度
colors: 256, // 2-256色パレット
dithering: "floyd_steinberg",
targetSizeKB: 5000, // 5MB以下に自動最適化
fps: 15, // 低いFPS = 小さいファイル
},
});
console.log(`GIF size: ${(result.fileSize / 1024).toFixed(0)} KB`);
console.log(`Estimated size was: ${result.estimatedSizeKB} KB`);
targetSizeKBを設定すると、Rendervidはレンダリング前に出力ファイルサイズを推定し、ターゲットを満たすようにパラメータ(色数、解像度、FPS)を自動的に調整します。これは、ファイルサイズ制限のあるプラットフォーム(例:Slackの50MB制限、メールの一般的な10MB制約)に特に役立ちます。
// 2MBのメール制約に収まるように自動最適化
const result = await renderer.render(template, {
format: "gif",
outputPath: "/output/email-banner.gif",
gif: {
preset: "email",
targetSizeKB: 2000,
},
});
Rendervidは、13のパッケージを持つモノレポとして構成されています。各パッケージには焦点を絞った責任があり、すべてのデプロイシナリオをサポートするために組み合わされています。
@rendervid/
├── core エンジン、型、検証、アニメーションシステム
│ ├── テンプレートパーサーとバリデーター(AJV + JSON Schema)
│ ├── アニメーションエンジン(40以上のプリセット、30以上のイージング関数)
│ ├── レイヤーシステム(text、image、video、shape、audio、group、lottie、custom)
│ └── シーン管理とトランジション(17種類)
│
├── renderer-browser クライアントサイドレンダリング
│ ├── Canvasベースのフレームレンダリング
│ ├── WebMエクスポート用のMediaRecorder
│ └── WebAssembly MP4エンコーダー
│
├── renderer-node サーバーサイドレンダリング
│ ├── Playwright/Puppeteerヘッドレスブラウザ
│ ├── FFmpeg統合(fluent-ffmpeg)
│ ├── GPUアクセラレーション
│ └── GIF最適化パイプライン
│
├── cloud-rendering マルチクラウドオーケストレーション
│ ├── AWS Lambdaプロバイダー
│ ├── Azure Functionsプロバイダー
│ ├── Google Cloud Functionsプロバイダー
│ ├── Dockerローカルプロバイダー
│ ├── チャンクスプリッターとマージャー
│ └── オブジェクトストレージアダプター(S3、Blob、GCS)
│
├── player ビデオ/テンプレートプレイヤーコンポーネント
├── editor ビジュアルテンプレートエディタ(Zustand状態)
├── components 事前構築されたReactコンポーネント
│ ├── AnimatedLineChart
│ ├── AuroraBackground
│ ├── WaveBackground
│ ├── SceneTransition
│ └── TypewriterEffect
│
├── templates テンプレート定義と例(100以上)
├── testing テストユーティリティ
│ ├── Vitestカスタムマッチャー
│ ├── スナップショットテストヘルパー
│ └── ビジュアルリグレッションユーティリティ
│
├── editor-playground エディタ開発環境
├── player-playground プレイヤー開発環境
├── mcp Model Context Protocolサーバー
└── docs VitePressドキュメントサイト
renderer-nodeをラップし、その作業をクラウド関数またはDockerコンテナに分散します。Rendervidは、信頼性、パフォーマンス、開発者エクスペリエンスのために選ばれた最新のTypeScriptスタック上に構築されています。
| レイヤー | テクノロジー | 目的 |
|---|---|---|
| 言語 | TypeScript | 全13パッケージにわたる型安全性 |
| ビルド | tsup、Vite | 高速ビルド、ツリーシェイキング、ESM/CJS出力 |
| テスト | Vitest | ユニットテスト、スナップショットテスト、カスタムマッチャー |
| UIフレームワーク | React 18.3.1 | コンポーネントレンダリング、テンプレート構成 |
| 状態管理 | Zustand | エディタ状態(軽量、ボイラープレートなし) |
| スタイリング | Tailwind CSS | エディタとプレイヤーUI |
| 検証 | AJV with JSON Schema | レンダリング前のテンプレート検証 |
| ブラウザレンダリング | HTML Canvas API | ブラウザでのフレームごとの描画 |
| ヘッドレスブラウザ | Playwright、Puppeteer | サーバーサイドフレームキャプチャ |
| ビデオエンコーディング | FFmpeg(fluent-ffmpeg) | H.264、H.265、VP9、ProRes、GIFエンコーディング |
| 3Dグラフィックス | Three.js(オプション)、CSS 3D | 3Dシーンとパースペクティブトランスフォーム |
| ドキュメント | VitePress | パッケージドキュメントサイト |
Rendervidには、テンプレートを検証するためのカスタムVitestマッチャー、スナップショットテストヘルパー、ビジュアルリグレッションユーティリティを提供する専用のテストパッケージ(@rendervid/testing)が含まれています。
import { describe, it, expect } from "vitest";
import "@rendervid/testing/matchers";
describe("Product Showcase Template", () => {
it("should be a valid template", () => {
expect(template).toBeValidTemplate();
});
it("should have the correct dimensions", () => {
expect(template).toHaveResolution(1920, 1080);
});
it("should contain at least one text layer", () => {
expect(template).toContainLayerOfType("text");
});
it("should have animations on the headline", () => {
expect(template.scenes[0].layers[0]).toHaveAnimation("entrance");
});
});
スナップショットテストは、テンプレートを画像にレンダリングし、保存された参照と比較します。視覚的な変更があるとテストが失敗するため、意図しない回帰を簡単に捉えることができます。
import { describe, it } from "vitest";
import { renderSnapshot } from "@rendervid/testing";
describe("Template Visual Regression", () => {
it("should match the reference snapshot at frame 0", async () => {
const snapshot = await renderSnapshot(template, { frame: 0 });
expect(snapshot).toMatchImageSnapshot();
});
it("should match the reference snapshot at the midpoint", async () => {
const totalFrames = template.fps * template.scenes[0].duration;
const snapshot = await renderSnapshot(template, {
frame: Math.floor(totalFrames / 2),
});
expect(snapshot).toMatchImageSnapshot();
});
});
ビジュアルリグレッションテストをCI/CDパイプラインに統合して、本番環境に到達する前にレンダリングの変更を捉えます:
# .github/workflows/visual-regression.yml
name: Visual Regression Tests
on: [pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 18
- run: npx playwright install chromium
- run: npm ci
- run: npm run test:visual
最速のレンダリング時間を得るには、時間がどこに費やされているか、どのレバーを引くことができるかを理解する必要があります。以下は、最も影響力のある最適化戦略です。
| シナリオ | 最適なターゲット |
|---|---|
| 編集中のクイックプレビュー | ブラウザ |
| 単一ビデオ、プロダクション品質 | Node.js |
| 10~100ビデオのバッチ | Node.jsまたはDocker |
| 100以上のビデオのバッチまたは時間重視 | クラウド(AWS/Azure/GCP) |
draft品質を使用する。 最終エクスポートのみhighまたはlosslessに切り替えます。renderWaitTimeを賢く使用するrenderWaitTimeオプションは、外部メディア(画像、ビデオ、フォント)の読み込みを可能にするためにレンダリングを一時停止します。これを、すべてのアセットが読み込まれることを保証する最小値に設定します。500~2000msの値が一般的です。高すぎる値に設定すると、すべてのフレームで時間が無駄になります。
await renderer.render(template, {
renderWaitTime: 1000, // 1秒で通常十分
});
10秒を超えるビデオの場合、並列レンダリング(Dockerまたはクラウド)は順次レンダリングよりも高速になります。損益分岐点は、ハードウェアとクラウド構成に依存しますが、経験則として:
GIFは本質的に大きいです。ファイルサイズを管理可能に保つには:
social、web、email)を使用して解像度を下げる。targetSizeKBを使用して、Rendervidにパラメータを自動最適化させる。none)を避ける。互換性のあるGPUを搭載したマシンでは、ハードウェアアクセラレーションエンコーディングにより、エンコーディングステップのレンダリング時間を2~5倍短縮できます。これは、高解像度(4K以上)および高ビットレート出力に最も影響があります。
テンプレートが外部画像やビデオを参照している場合は、レンダリング前にローカルストレージに事前ダウンロードします。レンダリング中のネットワークレイテンシは、レンダリングが遅い、または失敗する最も一般的な原因です。
Rendervidは4つのデプロイオプションをサポートしています:クライアントサイドのプレビューやWebアプリ用のブラウザベースレンダリング、FFmpegを使用したサーバーサイドバッチ処理用のNode.jsレンダリング、10~50倍の並列高速化を実現するAWS Lambda/Azure Functions/GCPでのクラウドレンダリング、そして無料のローカル並列レンダリングを提供するDockerです。
クラウドレンダリングのコストは、AWS Lambda、Azure Functions、またはGoogle Cloud Functionsで1分あたり約$0.02、つまり1時間のレンダリングで約$1です。Dockerベースのローカルレンダリングは完全に無料で、同じ並列レンダリングのメリットを提供します。
クラウドレンダリングは、ビデオをフレームチャンクに分割するコーディネーター、それらをワーカー関数(Lambda/Azure/GCP)に配信し、各ワーカーが割り当てられたフレームをレンダリングし、マージャーがすべてのフレームを最終ビデオに結合し、出力がオブジェクトストレージ(S3/Azure Blob/GCS)に保存されるという仕組みを使用しています。
ブラウザレンダリングには、Canvas サポートを備えた最新のブラウザが必要です。Node.jsレンダリングには、Node.js 18以上、PlaywrightまたはPuppeteer、およびFFmpegのインストールが必要です。クラウドレンダリングには、AWS/Azure/GCPアカウント、またはローカルにインストールされたDockerが必要です。
はい、Node.jsレンダラーは高速レンダリングのためのハードウェアアクセラレーションをサポートしています。GPUアクセラレーションは、多くのレイヤー、エフェクト、高解像度を持つ複雑なテンプレートのレンダリングを大幅に高速化できます。
Rendervidは、時間的スーパーサンプリングを使用してモーションブラーを実装し、出力フレームごとに複数のサブフレームをレンダリングしてブレンドします。品質プリセットは、低(5サンプル、5倍のレンダリング時間)から超高(32サンプル、32倍のレンダリング時間)まであり、映画のような滑らかさを生み出します。

Rendervid テンプレートシステムの完全ガイド。JSON ビデオテンプレートの作成方法、{{variable}} 構文を使った動的変数の使用、40種類以上のアニメーションプリセット、17種類のシーントランジション、30種類以上のイージング関数の設定方法を学びます。...

Rendervid の全コンポーネントを探索:8つの組み込みレイヤータイプ(テキスト、画像、動画、シェイプ、オーディオ、グループ、Lottie、カスタム)、構築済み React コンポーネント、ビジュアルテンプレートエディター、動画プレイヤー。完全な React サポートでカスタムコンポーネントを作成。...

プログラマティック動画生成のための無料オープンソースのRemotion代替ツール、Rendervidをご紹介します。MCP統合、JSONテンプレート、クラウドレンダリングを備えたAIファーストの設計で、ライセンス料は不要。AIエージェント、自動化、大規模コンテンツ制作に最適です。...