硬體加速渲染
使用 GPU 硬體加速(VideoToolbox)加速 Remotion 的影片編碼過程,目前支援 macOS 上的 ProRes、H.264 和 H.265 格式。
硬體加速渲染
自 v4.0.228 起可用
什麼是硬體加速編碼
編碼是將一連串影像轉換為影片檔案的過程。除了渲染幀之外,編碼是製作影片所需的兩個步驟之一。
從 Remotion v4.0.228 起,Remotion 在某些情況下支援硬體加速編碼。由於編碼因平台和編碼器而異,目前只支援有限的場景。
目前支援的情況
| 條件 | 說明 |
|---|---|
| 作業系統 | 目前只支援 macOS |
| 加速技術 | 使用 VideoToolbox |
| ProRes | 自 v4.0.228 起支援 |
| H.264 | 自 v4.0.236 起支援 |
| H.265 | 自 v4.0.236 起支援 |
注意:Remotion Lambda 和 Cloud Run 不支援硬體加速,因為這些雲端服務不提供 GPU 硬體加速支援。
啟用硬體加速
hardwareAcceleration 選項有三個值:
"disabled"(預設):不使用硬體加速"if-possible":如果可用則啟用硬體加速,不可用時自動回退到軟體編碼"required":必須使用硬體加速,若不可用則渲染失敗
在 SSR API 中使用
在 renderMedia() 函式中使用 hardwareAcceleration 選項:
import { renderMedia, selectComposition } from "@remotion/renderer";
const composition = await selectComposition({
serveUrl: "http://localhost:3000",
id: "MyComp",
});
// 盡可能使用硬體加速
await renderMedia({
composition,
serveUrl: "http://localhost:3000",
codec: "prores",
outputLocation: "out/video.mov",
inputProps: {},
hardwareAcceleration: "if-possible",
});// 必須使用硬體加速(失敗時報錯)
await renderMedia({
composition,
serveUrl: "http://localhost:3000",
codec: "h264",
outputLocation: "out/video.mp4",
inputProps: {},
hardwareAcceleration: "required",
});在 CLI 中使用
使用 --hardware-acceleration 選項:
# ProRes 格式,盡可能使用硬體加速
npx remotion render MyComp \
--codec prores \
--hardware-acceleration if-possible
# H.264 格式,必須使用硬體加速
npx remotion render MyComp \
--codec h264 \
--hardware-acceleration required
# H.265 格式,盡可能使用硬體加速
npx remotion render MyComp \
--codec h265 \
--hardware-acceleration if-possible在 Remotion Studio 中使用
在 Remotion Studio 渲染影片時,可以在「進階」(Advanced)標籤中設定硬體加速選項。
在設定檔中使用
import { Config } from "@remotion/cli/config";
Config.setHardwareAcceleration("if-possible");控制檔案大小與品質
啟用硬體加速後,預設情況下檔案大小會顯著增大,可能是因為壓縮效率較軟體編碼低。
重要:CRF 選項與硬體加速編碼器不相容。請改用
--video-bitrate旗標控制輸出品質和檔案大小。
我們發現,匯出 Full HD H.264 影片時,--video-bitrate=8M 可以達到與軟體編碼相近的檔案大小。
# 使用硬體加速並控制位元率
npx remotion render MyComp \
--codec h264 \
--hardware-acceleration if-possible \
--video-bitrate=8M
# ProRes 格式的建議設定
npx remotion render MyComp \
--codec prores \
--hardware-acceleration if-possible \
--video-bitrate=50Mawait renderMedia({
composition,
serveUrl: "http://localhost:3000",
codec: "h264",
outputLocation: "out/video.mp4",
hardwareAcceleration: "if-possible",
videoBitrate: "8M", // 注意:不能同時設定 crf
});確認是否正在使用硬體加速
開啟詳細日誌(verbose logging)執行渲染。如果正在使用硬體加速,你會看到類似以下的日誌訊息:
Encoder: prores_videotoolbox, hardware accelerated: true
注意:不要依賴這個日誌訊息的確切措辭來判斷是否使用了硬體加速,因為措辭可能隨版本更新而改變。
啟用詳細日誌的方法:
npx remotion render MyComp --log=verbose --hardware-acceleration if-possible效能對比
以下是軟體編碼與硬體加速編碼的對比:
| 特性 | 軟體編碼 | 硬體加速 |
|---|---|---|
| 速度 | 慢 | 快(依硬體而定) |
| 壓縮效率 | 高 | 較低(預設設定) |
| 檔案大小 | 較小 | 較大(需手動設定位元率) |
| 支援平台 | 所有平台 | 目前只有 macOS |
| CRF 控制 | 支援 | 不支援(需用位元率) |
| 雲端環境 | 支援 | 不支援 |
實際使用建議
本地開發快速預覽
硬體加速非常適合在本地開發時快速生成預覽影片:
npx remotion render MyComp \
--codec h264 \
--hardware-acceleration if-possible \
--video-bitrate=4M \
out/preview.mp4生產環境渲染
在生產環境(雲端)中,硬體加速不可用,應使用軟體編碼並設定合適的 CRF:
# 生產環境:使用軟體編碼
npx remotion render MyComp \
--codec h264 \
--crf=18 \
out/production.mp4條件式使用
在本地 macOS 環境快速渲染,在其他環境回退到軟體編碼:
import { renderMedia, selectComposition } from "@remotion/renderer";
import os from "os";
const isMac = os.platform() === "darwin";
await renderMedia({
composition,
serveUrl: "http://localhost:3000",
codec: "h264",
outputLocation: "out/video.mp4",
// 只在 Mac 上嘗試硬體加速
hardwareAcceleration: isMac ? "if-possible" : "disabled",
// 使用硬體加速時設定位元率,否則使用 CRF
...(isMac
? { videoBitrate: "8M" }
: { crf: 18 }),
});限制與已知問題
- 僅限 macOS:目前只有 macOS 系統支援 VideoToolbox 硬體加速
- 不支援 CRF:使用硬體加速時,必須改用
--video-bitrate控制品質 - 雲端服務不支援:Remotion Lambda 和 Cloud Run 不支援硬體加速
- 預設檔案較大:硬體加速編碼的壓縮效率較低,需手動設定位元率