Remotion Lambda でAWS並列レンダリング:大量動画を高速生成する実装ガイド

Remotion Lambda AWS並列レンダリング

Remotionのローカルレンダリングは1本の動画生成に数分かかる。AWS Lambdaを使った並列レンダリング(Remotion Lambda)を導入すれば、100本の動画を同時並列で処理でき、大量動画の量産に現実的な速度を実現できる。

Remotion Lambdaのアーキテクチャ

ローカル / サーバー
  │
  ├── renderMediaOnLambda() 呼び出し
  │     ↓
  │   Lambda関数(オーケストレーター)
  │     ↓
  │   ┌─────────────────────┐
  │   │ チャンク分割(並列処理) │
  │   │  Lambda × N個      │
  │   │  各チャンクをレンダリング │
  │   └─────────────────────┘
  │     ↓
  │   S3バケット(フレーム保存)
  │     ↓
  │   ffmpegで結合
  │     ↓
  └── S3に最終動画ファイルを保存

あなたの「作りたい」を叶えるAdobeの動画ツール

初心者からプロまで。目的に合わせて最適な制作方法が見つかります

1まずは無料で始めるなら Adobe Express

豊富なテンプレートとAI機能で、誰でも簡単に見栄えの良い動画が作れます。SNS投稿やショート動画の作成に最適。ブラウザやスマホアプリですぐに始められます。

2プロ品質を求めるなら テンプレート活用

「こんな動画が作りたい」というイメージに合うテンプレートを選ぶだけ。テキストや映像を差し替えるだけで、プロが作ったような動画が驚くほど手軽に完成します。

3本格的な編集に挑戦するなら Creative Cloud

テンプレートのカスタマイズや、ゼロからオリジナリティを追求するならプロ用ツールが最適。2つの代表的なアプリで、表現の幅は無限大に広がります。

  • Premiere Pro: カット編集、テロップ、色調整など、動画編集の全てをこなす万能ツール。
  • After Effects: VFXやモーショングラフィックスなど、映像をリッチに彩る特殊効果ツール。

これらを含む20以上のアプリが全て使えるコンプリートプランがおすすめです。

あなたの「作りたい」を叶えるAdobeの動画ツール

1無料で手軽に始める

豊富なテンプレートとAI機能で、SNS投稿やショート動画の作成に最適です。

Adobe Expressを試す

2プロ品質の本格編集へ

Premiere ProやAfter Effectsで、テンプレート活用から本格的な映像制作まで挑戦できます。

3か月半額で始める

セットアップ手順

1. AWSの準備

# Remotion Lambdaに必要なIAMポリシーを作成
npx remotion lambda policies validate

# Lambda関数とS3バケットをデプロイ
npx remotion lambda functions deploy --memory=3009 --disk=10240 --timeout=120

# デプロイされた関数名を確認
npx remotion lambda functions ls

2. 環境変数の設定

# .env
REMOTION_AWS_ACCESS_KEY_ID=your-access-key
REMOTION_AWS_SECRET_ACCESS_KEY=your-secret-key
REMOTION_AWS_REGION=ap-northeast-1
REMOTION_LAMBDA_FUNCTION_NAME=remotion-render-3-3-82-mem3009mb-disk10240mb-120sec
REMOTION_S3_BUCKET=remotionlambda-apnortheast1-xxxx

3. Remotionサイトをデプロイ

# コンポジションをS3にデプロイ(バンドル化)
npx remotion lambda sites create --site-name=my-video-site

# 出力例
Site ID: my-video-site
Serve URL: https://remotionlambda-xxxx.s3.ap-northeast-1.amazonaws.com/sites/my-video-site/index.html

コードでrenderMediaOnLambdaを実装する

import { renderMediaOnLambda, getRenderProgress } from "@remotion/lambda/client";

const SITE_URL = process.env.REMOTION_SITE_URL!;
const FUNCTION_NAME = process.env.REMOTION_LAMBDA_FUNCTION_NAME!;
const REGION = "ap-northeast-1";

interface VideoInput {
  id: string;
  title: string;
  subtitle: string;
  backgroundColor: string;
}

async function renderVideoOnLambda(input: VideoInput): Promise {
  // Lambda でレンダリング開始
  const { renderId, bucketName } = await renderMediaOnLambda({
    region: REGION,
    functionName: FUNCTION_NAME,
    serveUrl: SITE_URL,
    composition: "MyComposition",
    inputProps: {
      title: input.title,
      subtitle: input.subtitle,
      backgroundColor: input.backgroundColor,
    },
    codec: "h264",
    outName: `output-${input.id}.mp4`,
  });

  console.log(`レンダリング開始: renderId=${renderId}`);

  // 完了まで待機
  while (true) {
    const progress = await getRenderProgress({
      renderId,
      bucketName,
      functionName: FUNCTION_NAME,
      region: REGION,
    });

    if (progress.done) {
      console.log(`完了: ${progress.outputFile}`);
      return progress.outputFile!;
    }

    if (progress.fatalErrorEncountered) {
      throw new Error(`レンダリング失敗: ${progress.errors.join(", ")}`);
    }

    console.log(`進捗: ${Math.round(progress.overallProgress * 100)}%`);
    await new Promise((resolve) => setTimeout(resolve, 2000));
  }
}

大量動画を並列処理する

// 100本の動画を並列でレンダリング
async function renderBatch(inputs: VideoInput[]): Promise {
  const CONCURRENCY = 20; // 同時実行数(Lambdaの同時実行制限に注意)
  const results: string[] = [];

  for (let i = 0; i < inputs.length; i += CONCURRENCY) {
    const chunk = inputs.slice(i, i + CONCURRENCY);
    console.log(`バッチ ${Math.floor(i / CONCURRENCY) + 1}: ${chunk.length}本を並列処理`);

    const chunkResults = await Promise.all(
      chunk.map((input) => renderVideoOnLambda(input))
    );
    results.push(...chunkResults);
  }

  return results;
}

// 実行例
const videoInputs: VideoInput[] = Array.from({ length: 50 }, (_, i) => ({
  id: `video-${i + 1}`,
  title: `商品紹介 #${i + 1}`,
  subtitle: "詳細はリンクから",
  backgroundColor: ["#FF6B6B", "#4ECDC4", "#45B7D1"][i % 3],
}));

renderBatch(videoInputs).then((urls) => {
  console.log(`${urls.length}本の動画が完成しました`);
  urls.forEach((url, i) => console.log(`${i + 1}: ${url}`));
});

コスト最適化

設定目安コスト(1本60秒)
メモリ1769MB・30fpsデフォルト約$0.04
メモリ3009MB・30fps高速約$0.07
メモリ3009MB・Concurrency10並列分割約$0.04(速度は2倍)
// concurrencyPerLambdaで1つのLambda内の並列度を調整
const { renderId } = await renderMediaOnLambda({
  // ...
  concurrencyPerLambda: 10,  // フレームの並列処理数(デフォルト: 1)
  framesPerLambda: 20,       // 1つのLambdaが担当するフレーム数
});

まとめ

Remotion Lambdaを使えば、ECサイトの商品紹介動画100本や、不動産の物件紹介動画など、データドリブンな大量動画生成が現実的なコストで実現できる。初期セットアップに1〜2時間かかるが、一度整備すれば動画制作のスケールが大幅に変わる。

あなたの「作りたい」を叶えるAdobeの動画ツール

初心者からプロまで。目的に合わせて最適な制作方法が見つかります

1まずは無料で始めるなら Adobe Express

豊富なテンプレートとAI機能で、誰でも簡単に見栄えの良い動画が作れます。SNS投稿やショート動画の作成に最適。ブラウザやスマホアプリですぐに始められます。

2プロ品質を求めるなら テンプレート活用

「こんな動画が作りたい」というイメージに合うテンプレートを選ぶだけ。テキストや映像を差し替えるだけで、プロが作ったような動画が驚くほど手軽に完成します。

3本格的な編集に挑戦するなら Creative Cloud

テンプレートのカスタマイズや、ゼロからオリジナリティを追求するならプロ用ツールが最適。2つの代表的なアプリで、表現の幅は無限大に広がります。

  • Premiere Pro: カット編集、テロップ、色調整など、動画編集の全てをこなす万能ツール。
  • After Effects: VFXやモーショングラフィックスなど、映像をリッチに彩る特殊効果ツール。

これらを含む20以上のアプリが全て使えるコンプリートプランがおすすめです。

あなたの「作りたい」を叶えるAdobeの動画ツール

1無料で手軽に始める

豊富なテンプレートとAI機能で、SNS投稿やショート動画の作成に最適です。

Adobe Expressを試す

2プロ品質の本格編集へ

Premiere ProやAfter Effectsで、テンプレート活用から本格的な映像制作まで挑戦できます。

3か月半額で始める
タイトルとURLをコピーしました