Remotion LabRemotion Lab
其他暫存目錄

暫存目錄

Remotion 渲染過程中使用的暫存目錄說明、設定方式與清理策略。

暫存目錄

Remotion 在渲染影片時,需要將中間產物(如各幀截圖)寫入磁碟。這些暫時性的檔案會存放在「暫存目錄」中。了解暫存目錄的運作方式,有助於管理磁碟空間與排查渲染問題。

暫存目錄的用途

在渲染過程中,Remotion 會在暫存目錄中存放:

  • 各幀的截圖:每一幀渲染完成後,會先存成 PNG 或 JPEG 圖片。
  • 音訊片段:從影片素材中提取的音訊資料。
  • 打包後的資產:webpack 打包的臨時輸出。
  • Chromium 使用者資料:Chromium 實例的暫時設定檔。

預設暫存目錄位置

Remotion 預設使用作業系統的暫存目錄:

作業系統預設路徑
macOS / Linux/tmp/remotion_*
Windows%TEMP%\remotion_*

每次渲染會建立一個帶有唯一識別碼的子目錄,例如 /tmp/remotion_render_abc123/

自訂暫存目錄

方法一:環境變數

設定 REMOTION_CACHE_DIR 環境變數:

REMOTION_CACHE_DIR=/data/remotion-cache npx remotion render MyComp out/video.mp4

方法二:CLI 選項

npx remotion render MyComp out/video.mp4 --temp-dir=/data/remotion-temp

方法三:程式碼設定

import { renderMedia } from "@remotion/renderer";
 
await renderMedia({
  composition,
  serveUrl,
  codec: "h264",
  outputLocation: "out/video.mp4",
  // 指定暫存目錄
  offthreadVideoCacheSizeInBytes: 512 * 1024 * 1024, // 512MB 快取上限
});

磁碟空間估算

暫存目錄所需的磁碟空間取決於影片長度與解析度:

所需空間 ≈ 總幀數 × 每幀大小

範例(1920×1080,PNG 格式):
- 每幀約 2-5 MB
- 300 幀(10 秒,30fps)× 3MB = 約 900MB

建議在渲染長片之前確認磁碟空間充足。在 AWS Lambda 等環境中,/tmp 分區通常有 512MB 的上限,需特別留意。

Lambda 環境的限制

在 AWS Lambda 中執行 Remotion 渲染時,/tmp 目錄的空間有限制(目前上限為 10GB,但預設只有 512MB)。可以在 Lambda 設定中增加 /tmp 的大小:

// AWS CDK 範例
const fn = new lambda.Function(this, "RenderFunction", {
  ephemeralStorageSize: cdk.Size.gibibytes(2), // 增加到 2GB
});

渲染後的清理

Remotion 在渲染完成後,不會自動清理暫存目錄。你需要自行清理,以避免磁碟空間耗盡。

手動清理

# 刪除所有 Remotion 暫存目錄
rm -rf /tmp/remotion_*

程式碼清理

import { renderMedia } from "@remotion/renderer";
import { rm } from "fs/promises";
import path from "path";
import os from "os";
 
const tempDir = path.join(os.tmpdir(), `remotion_${Date.now()}`);
 
try {
  await renderMedia({
    composition,
    serveUrl,
    codec: "h264",
    outputLocation: "out/video.mp4",
  });
} finally {
  // 無論成功或失敗,都清理暫存目錄
  await rm(tempDir, { recursive: true, force: true });
}

排程清理

在伺服器上可以設定定期清理任務:

# 每天凌晨 2 點清理超過 24 小時的 Remotion 暫存目錄
0 2 * * * find /tmp -name "remotion_*" -mtime +1 -exec rm -rf {} +

偵錯:保留暫存目錄

在排查渲染問題時,有時需要檢查暫存目錄中的內容:

# 加入 --keep-browser-open 旗標後,渲染失敗時暫存目錄不會被刪除
npx remotion render MyComp out/video.mp4 --log=verbose

渲染失敗後,可以找到對應的暫存目錄,查看失敗幀的截圖,協助診斷問題。

小結

  • Remotion 渲染時會在 /tmp 建立暫存目錄存放幀截圖與音訊片段。
  • 可透過環境變數或 CLI 選項自訂暫存目錄位置。
  • Lambda 等環境需注意 /tmp 空間限制。
  • 渲染完成後需手動清理暫存目錄,建議使用 finally 區塊確保清理執行。