Remotion LabRemotion Lab
LambdaLambda 自訂輸出目的地

Lambda 自訂輸出目的地

自訂 Remotion Lambda 渲染的輸出位置,支援自訂檔名、不同 S3 儲存桶,以及 Supabase、Cloudflare R2、DigitalOcean 等第三方雲端儲存

自訂 Lambda 輸出目的地

預設情況下,渲染產出會儲存在與站台相同的 S3 儲存桶中,路徑為 renders/${renderId}/out.{extension}(例如:renders/hy0k2siao8/out.mp4)。

你可以透過以下方式自訂輸出目的地:

  1. 自訂輸出檔名:更改輸出檔案的名稱
  2. 寫入不同的 S3 儲存桶:將渲染結果存放至另一個 AWS S3 儲存桶
  3. 上傳至其他 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 中傳入包含 keybucketName 的物件:

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-!_.*'()/]+)$/g
  • bucketName 必須符合:/^(?=^.{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 會驗證並拒絕含底線的名稱,請勿在儲存桶名稱中使用底線
  • 儲存桶必須使用統一存取控制,而非精細存取控制
  • 若要取得 accessKeyIdsecretAccessKey,請建立一個具有 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',
  },
});

參閱