Lambda 自訂輸出目的地
自訂 Remotion Lambda 渲染的輸出位置,支援自訂檔名、不同 S3 儲存桶,以及 Supabase、Cloudflare R2、DigitalOcean 等第三方雲端儲存
自訂 Lambda 輸出目的地
預設情況下,渲染產出會儲存在與站台相同的 S3 儲存桶中,路徑為 renders/${renderId}/out.{extension}(例如:renders/hy0k2siao8/out.mp4)。
你可以透過以下方式自訂輸出目的地:
- 自訂輸出檔名:更改輸出檔案的名稱
- 寫入不同的 S3 儲存桶:將渲染結果存放至另一個 AWS S3 儲存桶
- 上傳至其他 S3 相容的雲端供應商:如 Supabase、Cloudflare R2、DigitalOcean Spaces 等
自訂輸出檔名
在 renderMediaOnLambda() 或 renderStillOnLambda() 中傳入 outName 參數:
import { renderMediaOnLambda } from '@remotion/lambda';
const { bucketName, renderId } = await renderMediaOnLambda({
region: 'us-east-1',
functionName: 'remotion-render-bds9aab',
composition: 'MyVideo',
serveUrl: 'https://remotionlambda-qg35eyp1s1.s3.eu-central-1.amazonaws.com/sites/bf2jrbfkw',
inputProps: {},
codec: 'h264',
outName: 'my-custom-filename.mp4',
});在 CLI 中,使用 --out-name 旗標:
npx remotion lambda render MyComp --out-name="my-custom-filename.mp4"輸出名稱必須符合正規表達式:/^([0-9a-zA-Z-!_.*'()/]+)$/g
自訂輸出 S3 儲存桶
若要渲染至不同的 AWS S3 儲存桶,請在 outName 中傳入包含 key 與 bucketName 的物件:
import { renderMediaOnLambda } from '@remotion/lambda';
const { bucketName, renderId } = await renderMediaOnLambda({
region: 'us-east-1',
functionName: 'remotion-render-bds9aab',
composition: 'MyVideo',
serveUrl: 'https://remotionlambda-qg35eyp1s1.s3.eu-central-1.amazonaws.com/sites/bf2jrbfkw',
inputProps: {},
codec: 'h264',
imageFormat: 'jpeg',
maxRetries: 1,
privacy: 'public',
outName: {
key: 'my-output',
bucketName: 'output-bucket',
},
});使用此功能前請注意:
- 你必須擴充預設的 Remotion 角色政策(非使用者政策),以允許對該儲存桶的讀寫存取
- 該儲存桶必須位於同一個 AWS 區域
- 呼叫
downloadMedia()或getRenderProgress()時,bucketName應傳入站台所在的儲存桶,而非影片輸出的儲存桶 key必須符合:/^([0-9a-zA-Z-!_.*'()/]+)$/gbucketName必須符合:/^(?=^.{3,63}$)(?!^(\d+\.)+\d+$)(^(([a-z0-9]|[a-z0-9][a-z0-9-]*[a-z0-9])\.)*([a-z0-9]|[a-z0-9][a-z0-9-]*[a-z0-9])$)/
此功能不支援 CLI 操作。
儲存至其他雲端供應商
你可以將渲染結果上傳至其他 S3 相容的雲端供應商,只需額外提供 s3OutputProvider 選項:
import { renderMediaOnLambda } from '@remotion/lambda';
const { bucketName, renderId } = await renderMediaOnLambda({
region: 'us-east-1',
functionName: 'remotion-render-bds9aab',
composition: 'MyVideo',
serveUrl: 'https://remotionlambda-qg35eyp1s1.s3.eu-central-1.amazonaws.com/sites/bf2jrbfkw',
inputProps: {},
codec: 'h264',
imageFormat: 'jpeg',
maxRetries: 1,
privacy: 'no-acl',
outName: {
key: 'my-output',
bucketName: 'output-bucket',
s3OutputProvider: {
endpoint: 'https://fra1.digitaloceanspaces.com',
accessKeyId: 'YOUR_ACCESS_KEY',
secretAccessKey: 'YOUR_SECRET_KEY',
},
},
});支援的供應商
| 供應商 | 支援狀態 |
|---|---|
| Supabase Storage | 支援 |
| Cloudflare R2 | 支援 |
| DigitalOcean Spaces | 支援 |
| Google Cloud Storage | 支援(詳見下方注意事項) |
| Azure Blob Storage | 不支援(非 S3 相容) |
Google Cloud Storage 注意事項
- GCP 允許在儲存桶名稱中使用底線,但 Remotion 會驗證並拒絕含底線的名稱,請勿在儲存桶名稱中使用底線
- 儲存桶必須使用統一存取控制,而非精細存取控制
- 若要取得
accessKeyId與secretAccessKey,請建立一個具有 Cloud Storage 讀寫權限的服務帳號,然後執行:
gcloud storage hmac create INSERT_SERVICE_ACCOUNT_EMAIL --project=INSERT_PROJECT_ID使用第三方雲端後的注意事項
使用 s3OutputProvider 後,在呼叫 downloadMedia() 或 getRenderProgress() 時:
bucketName應傳入 AWS 儲存桶名稱(站台所在的儲存桶),而非第三方雲端的儲存桶名稱- 必須同樣提供
s3OutputProvider選項,使用相同的憑證
import { getRenderProgress } from '@remotion/lambda/client';
const progress = await getRenderProgress({
renderId: 'hy0k2siao8',
bucketName: 'remotionlambda-aws-bucket', // AWS 儲存桶,非第三方
functionName: 'remotion-render-bds9aab',
region: 'us-east-1',
s3OutputProvider: {
endpoint: 'https://fra1.digitaloceanspaces.com',
accessKeyId: 'YOUR_ACCESS_KEY',
secretAccessKey: 'YOUR_SECRET_KEY',
},
});