Remotion LabRemotion Lab
LambdaLambda 自訂層

Lambda 自訂層

在 Remotion Lambda 中使用自訂 Lambda 層,替換 Chrome 版本、字型或表情符號

Lambda 自訂層

Remotion Lambda 函式預設包含 Chrome 瀏覽器與基本字型。在某些進階使用情境中,你可能需要替換這些元件——例如使用不同版本的 Chrome、替換預設字型,或更換表情符號字型。

預設層配置

Remotion Lambda 提供兩種預設配置,可在部署函式時選擇:

預設選項(含 CJK 字型)

使用 --runtime-preference=cjk(或不指定選項)時:

元件大小
chromium196 MB
emoji-google9.9 MB
fonts1.9 MB
cjk(中日韓字型)16 MB
合計223.8 MB

Apple 表情符號選項

使用 --runtime-preference=apple-emojis 時:

元件大小
chromium196 MB
emoji-apple45 MB
fonts1.9 MB
合計242.9 MB

注意:啟用 Apple 表情符號後,為保持在 AWS 250 MB 限制內,CJK(中文、日文、韓文)字型支援將被移除,Google 表情符號也會一併移除。

版本需求

自訂 Lambda 層功能從 Remotion v3.0.17 起可用。Lambda 二進位檔案可能在 Remotion 次要版本中有所變動,請負責保持版本更新。

若你只需要新增字型,建議優先考慮使用 網頁字型,這樣更為簡便。

建立自訂二進位檔案

  1. 克隆 remotion-dev/lambda-binaries 儲存庫

  2. 該儲存庫中的 chromiumfonts 資料夾包含 ARM 版本的二進位檔案(x64 版本已停止支援)

  3. 將你想要的檔案放入對應的資料夾。例如,要新增 Apple 表情符號字型,將 AppleColorEmoji.ttf 放入 fonts/.fonts/NotoSans/ 資料夾

  4. 由於 AWS Lambda 層總大小不得超過 250 MB(解壓縮後),你需要移除等量的其他檔案,例如:

    • 移除 fonts/.fonts/NotoColorEmoji.ttf
    • 移除 fonts/.fonts/NotoSansCJKjp-Regular.otf
  5. 檢查資料夾大小:

sh size.sh
  1. 完成修改後,執行以下指令打包層:
sh make.sh

打包後的層將作為成品放置於 out 目錄中。

在 AWS 建立 Lambda 層

  1. 進入 AWS 主控台,選擇 Lambda 服務,然後選擇「Layers(層)」
  2. 點擊「Create layer(建立層)」,填入名稱
  3. out 資料夾上傳建立好的層壓縮檔
  4. 「Compatible architectures(相容架構)」、「Compatible runtimes(相容執行環境)」和「License(授權)」欄位為選填
  5. 層建立完成後,你將獲得版本 ARN(例如:arn:aws:lambda:us-east-1:123456789012:layer:apple-emoji:1)——請複製此 ARN

重要:你需要在每個使用 Remotion Lambda 的 AWS 區域分別建立此層。

更新 Lambda 函式

確保已部署 Remotion Lambda 函式後,你可以透過以下兩種方式之一更新函式使用的層:

方式一:透過 AWS 主控台

  1. 進入 AWS 主控台,選擇 Lambda 服務,然後選擇你要更新的 Lambda 函式
  2. 點擊「Layers(層)」
  3. 點擊「Edit(編輯)」
  4. 選擇要替換的層,點擊「Remove(移除)」,然後點擊「Save(儲存)」
  5. 返回後,再次點擊「Layers」,然後點擊「Add a layer(新增層)」
  6. 選擇「Specify an ARN(指定 ARN)」並輸入你剛才複製的 ARN
  7. 點擊「Verify(驗證)」,確認無誤後點擊「Add(新增)」

方式二:透過 Node.js 腳本

你可以在每次函式部署後執行以下腳本:

import {
  LambdaClient,
  UpdateFunctionConfigurationCommand,
} from '@aws-sdk/client-lambda';
 
const client = new LambdaClient({ region: 'us-east-1' });
 
await client.send(
  new UpdateFunctionConfigurationCommand({
    FunctionName: 'remotion-render-bds9aab',
    Layers: [
      'arn:aws:lambda:us-east-1:123456789012:layer:apple-emoji:1',
    ],
  })
);
 
console.log('Lambda 層已更新');

常見使用情境

  • 需要特定 Chrome 版本:當新版 Chromium 有渲染 bug,需要降版時
  • 使用 Apple 表情符號:製作目標受眾為 Apple 裝置用戶的影片時
  • 自訂字型集:當預設字型不滿足需求,需要精確控制可用字型時

參閱