在 Vercel 上渲染
關於在 Vercel 平台上部署 Remotion 渲染服務的常見問題,包含限制說明與替代方案建議。
在 Vercel 上渲染
可以在 Vercel 上渲染 Remotion 影片嗎?
不建議,且在大多數情況下無法正常運作。 Vercel 的 Serverless Function 有嚴格的執行環境限制,與 Remotion 的渲染需求不相容。
Vercel 有哪些限制導致無法渲染影片?
Vercel Serverless Function 的限制包括:
| 限制項目 | Vercel 限制 | Remotion 需求 |
|---|---|---|
| 執行時間 | 最長 60 秒(Pro)/ 10 秒(Hobby) | 數分鐘(視影片長度) |
| 記憶體 | 最大 3 GB | Chromium 需要大量記憶體 |
| 套件大小 | 50 MB(壓縮後) | Chromium 二進制檔超過 100 MB |
| 檔案系統 | 唯讀(除 /tmp) | 渲染需要讀寫臨時檔案 |
Remotion Lambda 和 Vercel 可以搭配使用嗎?
可以,這是推薦的組合。你可以:
- 使用 Vercel 部署 Next.js 前端和 API Routes
- 使用 Remotion Lambda(AWS Lambda)執行實際的影片渲染
- Next.js API Route 負責接收請求並呼叫
renderMediaOnLambda()
// pages/api/render.ts
import { renderMediaOnLambda } from "@remotion/lambda/client";
export default async function handler(req, res) {
const { renderId, bucketName } = await renderMediaOnLambda({
region: "us-east-1",
functionName: process.env.REMOTION_FUNCTION_NAME,
serveUrl: process.env.REMOTION_SERVE_URL,
composition: "MyVideo",
inputProps: req.body,
codec: "h264",
});
res.json({ renderId, bucketName });
}如果只是要預覽影片,可以在 Vercel 上使用 Remotion Player 嗎?
可以。@remotion/player 完全在客戶端(瀏覽器)中執行,不需要伺服器資源,因此可以在 Vercel 上正常部署和使用。這是在 Vercel 應用中展示 Remotion 影片的正確方式。
有辦法繞過 Vercel 的限制嗎?
沒有好的方法可以繞過。一些開發者嘗試過的方法及其問題:
- 分割任務:將渲染分成多個短任務鏈接 — 複雜且不可靠
- Edge Function:不支援 Node.js 原生模組,無法使用
- 增加逾時設定:仍受 Vercel 計劃上限限制
最佳解決方案是使用專為影片渲染設計的基礎設施。
除了 Remotion Lambda,還有哪些替代方案?
| 方案 | 優點 | 缺點 |
|---|---|---|
| Remotion Lambda(AWS) | 官方支援、自動擴展 | 需要 AWS 帳戶 |
| Railway / Render | 設定簡單、持久化伺服器 | 需要管理伺服器 |
| Google Cloud Run | 容器化、隨用隨付 | 需要 GCP 知識 |
| 自架 VPS | 完全控制 | 需要維護 |
Vercel 的 Edge Functions 可以用嗎?
不行。Edge Functions 執行在 V8 隔離環境中,無法使用 Node.js 原生模組、啟動子行程或存取檔案系統,而這些都是 Remotion 渲染所必需的。
詳情請參考 在 Edge 上渲染 文件。
如何在 Vercel 上設定 Remotion Lambda 的環境變數?
在 Vercel 控制台的「Settings > Environment Variables」中加入:
REMOTION_FUNCTION_NAME=remotion-render-xxxxx
REMOTION_SERVE_URL=https://your-s3-bucket.s3.amazonaws.com/sites/your-site/index.html
AWS_ACCESS_KEY_ID=your-access-key
AWS_SECRET_ACCESS_KEY=your-secret-key
AWS_REGION=us-east-1
注意:請勿將 AWS 憑證直接寫入程式碼,務必使用環境變數管理。
在 Vercel 上部署時出現「Module not found」錯誤怎麼辦?
這通常是因為 @remotion/renderer 嘗試引入 Node.js 原生模組。解決方法:
- 確認你沒有在客戶端程式碼中 import
@remotion/renderer - 在
next.config.js中將這些模組標記為 external:
const nextConfig = {
experimental: {
serverComponentsExternalPackages: ["@remotion/renderer"],
},
};