Remotion LabRemotion Lab
Cloud RunCloud Run 限制

Cloud Run 限制

Remotion Cloud Run 的技術限制,包含逾時時間、記憶體上限、並行數量與功能限制,以及對應的因應方式。

Cloud Run 限制

在使用 Remotion Cloud Run 時,需了解 Google Cloud Run 平台本身的限制,以便在架構設計時做出正確的決策。

實驗性功能:Cloud Run 目前處於 Alpha 狀態,並未積極開發中。

硬性限制(無法調整)

以下為 Google Cloud Run 平台的硬性上限:

限制項目上限值說明
最大逾時時間3600 秒(60 分鐘)單次請求的最長執行時間
最大記憶體32 GB單一實例可分配的最大記憶體
最大 CPU8 vCPU單一實例可分配的最大 CPU 核心數
可寫入檔案系統(記憶體內)受實例記憶體限制Cloud Run 使用記憶體內檔案系統
請求酬載大小32 MB單次 HTTP 請求的最大 body 大小
最大並行數(per 實例)1000單一實例可同時處理的請求數

最新數值請參閱 Google Cloud Run 配額頁面

可調整的限制

以下限制可在部署服務時自行設定:

限制項目預設值可設定範圍
逾時時間300 秒1–3600 秒
記憶體512 MB128 MB–32 GB
CPU1 vCPU1–8 vCPU
最小實例數00–1000
最大實例數1001–1000
npx remotion cloudrun services deploy \
  --region=asia-east1 \
  --timeout=3600 \
  --memory=32Gi \
  --cpu=8 \
  --min-instances=0 \
  --max-instances=50

渲染時長限制

受到最大逾時時間(3600 秒)的限制,可渲染的影片長度取決於渲染速度:

影片類型預估渲染速度最大可渲染時長(估算)
簡單動畫(30fps)實際時長的 3–5 倍渲染時間約 12–20 分鐘
中等複雜度(30fps)實際時長的 5–10 倍約 6–12 分鐘
高複雜度(含 3D/WebGL)實際時長的 10–20 倍約 3–6 分鐘

以上為粗略估算,實際結果取決於 Composition 複雜度、使用的媒體資源和分配的 CPU/記憶體。

記憶體使用特性

Cloud Run 使用記憶體內檔案系統(tmpfs),這表示:

  • 渲染過程中的暫存幀會佔用記憶體
  • 高解析度(4K 以上)影片需要大量記憶體
  • 長影片需要較多記憶體來緩衝幀資料

記憶體需求估算:

所需記憶體 ≈ 幀解析度(像素) × 4 bytes × 緩衝幀數 × 安全係數

例如,渲染 1080p 影片(1920×1080):

1920 × 1080 × 4 bytes × 8 幀緩衝 ≈ 63 MB(僅幀緩衝)
加上 Chromium 基礎記憶體(≈1.5 GB)和應用程式本身
建議最少配置 4 GB 記憶體

功能限制

無持久化檔案系統

Cloud Run 沒有持久化磁碟,每次請求結束後檔案系統內容會消失。因此:

  • 渲染輸出必須上傳至 Cloud Storage
  • 無法在兩次請求之間共用快取(除非使用外部快取如 Redis)
  • 預打包的 bundle 無法在多次請求間重用

不支援 GPU

Cloud Run 目前不支援 GPU 加速渲染。所有渲染工作均在 CPU 上執行,使用 SwAngle(軟體模擬 WebGL)。

若你的 Composition 大量使用 WebGL 或 3D 效果,渲染速度會較慢。

設定 OpenGL 為軟體渲染模式(必要設定):

// remotion.config.ts
import { Config } from "@remotion/cli/config";
 
Config.setChromiumOpenGlRenderer("swangle");

冷啟動延遲

當最小實例設為 0 時(預設值),第一次渲染請求需要啟動新的 Cloud Run 實例:

  • 冷啟動時間:通常 5–15 秒
  • 後續請求(熱實例):通常 < 1 秒的排程延遲

若需要低延遲,設定最小實例為 1:

npx remotion cloudrun services deploy \
  --region=asia-east1 \
  --min-instances=1

注意:最小實例為 1 時,即使沒有渲染請求,也會持續計費。

並行渲染數量

雖然單一實例支援最多 1000 個並行請求,但 Remotion 渲染是 CPU 密集型工作,建議每個實例同時只處理 1 個渲染任務:

const result = await renderMediaOnCloudrun({
  // ...
  // Cloud Run 服務建議設定 concurrency=1(每實例一個渲染)
});

要增加整體渲染吞吐量,應增加實例數量(水平擴展)而非增加每個實例的並行數。

與 Lambda 的限制比較

若你同時考慮 Remotion Lambda(AWS)和 Cloud Run(GCP),以下是限制比較:

限制項目Cloud RunLambda
最大逾時60 分鐘15 分鐘
最大記憶體32 GB10 GB
最大 CPU8 vCPU6 vCPU
GPU 支援
並行渲染多實例水平擴展多函式並行
冷啟動5–15 秒1–5 秒

Cloud Run 在記憶體和逾時方面比 Lambda 有更大的配額,適合需要渲染長影片或高解析度影片的使用場景。

因應限制的設計模式

長影片分段渲染

對於超過逾時限制的超長影片,可分段渲染再合併:

import { renderMediaOnCloudrun } from "@remotion/cloudrun";
import { mergeMedia } from "@remotion/media-utils"; // 假設工具
 
const SEGMENT_FRAMES = 1800; // 每段 60 秒(30fps)
const totalFrames = 9000;    // 5 分鐘影片
 
const segments = [];
for (let start = 0; start < totalFrames; start += SEGMENT_FRAMES) {
  const end = Math.min(start + SEGMENT_FRAMES - 1, totalFrames - 1);
 
  const result = await renderMediaOnCloudrun({
    region: "asia-east1",
    serviceName: "remotion-render-4-0-0",
    serveUrl: "https://storage.googleapis.com/...",
    composition: "LongVideo",
    codec: "h264",
    frameRange: [start, end],
    outName: `segments/segment-${start}.mp4`,
  });
 
  if (result.type === "success") {
    segments.push(result.cloudStorageUri);
  }
}
 
// 合併所有片段
// await mergeSegments(segments, "output/final.mp4");

小結

  • Cloud Run 最大逾時 60 分鐘、最大記憶體 32 GB、最大 CPU 8 核心
  • 不支援 GPU,需設定 chromiumOpenGlRenderer: "swangle"
  • 沒有持久化檔案系統,渲染輸出必須存至 Cloud Storage
  • 冷啟動約 5–15 秒,可設最小實例為 1 消除冷啟動(但需持續計費)
  • 超長影片可分段渲染再合併

另請參閱