Remotion LabRemotion Lab
參數化與輸出進階渲染:透明影片、GIF、編碼格式全攻略
renderingencodinggiftransparentadvanced

進階渲染:透明影片、GIF、編碼格式全攻略

同一個 Remotion 專案輸出 MP4、GIF、透明 MOV、HDR、WebM——學會渲染參數、編碼格式、硬體加速,選對格式省時省頻寬。

成品預覽

這是一支 14 秒的 Remotion 精華集錦(showreel)——kinetic typography、數據動畫、logo 揭露、幾何色塊、電影感光暈,快剪呈現 Remotion 能做出來的動畫風格。片尾低調帶出一排格式標籤(MP4、H.264、HEVC、WebM、ProRes、GIF、HDR),暗示同一個原始檔,不同用途就選不同格式輸出


這篇會做出什麼

把同一個 Remotion composition 輸出成 5 種不同格式,理解每種的取捨:

  1. MP4 H.264:YouTube、社群媒體、通用
  2. MP4 H.265 (HEVC):同品質檔案更小,但相容性差
  3. WebM VP9:網頁嵌入、透明背景支援
  4. ProRes 4444 (MOV):透明背景、專業剪輯軟體
  5. GIF:Twitter/Slack 小片段,最多 8 秒
  6. HDR MP4:Dolby Vision / HDR10,高階顯示器

每種格式都會比較「檔案大小、品質、相容性、用途」。


前置知識

  • 有一支已經做好的 Composition(用 T03 片頭或 T06 儀表板都行)

Step 1:基本 MP4 H.264(最通用)

npx remotion render MyComposition out/video.mp4

預設就是 H.264 yuv420p 30fps CRF 18。幾乎所有平台都吃這個格式。

CRF 是 H.264 的品質參數:

  • 15~18:視覺無損
  • 20~23:網路串流建議
  • 28+:低品質
渲染 MyComposition 成 MP4:
- H.264 CRF 18
- 輸出 out/high-quality.mp4
- 確認檔案大小

💡 編碼參數、CRF、preset 的完整說明在 /docs/encoding


Step 2:H.265 / HEVC(同品質更小)

npx remotion render MyComposition out/hevc.mp4 --codec=h265

H.265 同樣視覺品質下檔案大約小 30~50%。但:

  • Safari 沒問題,Chrome 要看版本
  • 編碼速度比 H.264 慢 2~3 倍
  • 某些 Android 裝置不支援

何時用 H.265:大檔案 + iOS 用戶為主 + 自己掌控播放端。

💡 各種 codec 對比、硬體解碼支援在 /docs/video-formats


Step 3:WebM VP9(網頁 + 透明)

npx remotion render MyComposition out/video.webm --codec=vp9

WebM 在 Chrome / Firefox 網頁直接播放很友善。更重要:支援 alpha 通道

何時用 WebM

  • 網頁嵌入小動畫
  • 需要透明背景
  • 不用支援 Safari(iOS 較舊版本不吃 WebM)

Step 4:透明背景 MOV(ProRes 4444)

這是動畫/影片合成的聖杯——透明背景讓你疊到任何影片上

渲染透明背景版本:

npx remotion render MyComposition out/alpha.mov \
  --codec=prores --pixel-format=yuva444p10le

先決條件:
1. Composition 的 <AbsoluteFill> 不能有 backgroundColor
2. 外層改成 style={{ backgroundColor: "transparent" }}
3. 或者在 Root.tsx 的 Composition defaultProps 設 backgroundColor="transparent"

ProRes 4444 是蘋果的專業編碼,支援 alpha。檔案很大(1080p 30fps 約 200 MB/分鐘),但可以丟進 Premiere / Final Cut 當素材。

💡 透明影片的完整設定、陷阱、相容性在 /docs/transparent-videos/docs/video-transparency


Step 5:GIF(Twitter/Slack)

npx remotion render MyComposition out/video.gif --codec=gif

GIF 的限制:

  • 最多 256 色
  • 沒有聲音
  • 檔案很大(動態複雜時)
  • 最高 30fps(大多數軟體只吃到 15fps)

優化

渲染 GIF 時加 --every-nth-frame=2 只取一半的幀
--width=640 縮小尺寸
這樣 10 秒的 GIF 可能從 10MB 降到 2MB

💡 GIF 渲染的完整參數、優化、取捨在 /docs/render-gif


Step 6:HDR(Dolby Vision / HDR10)

渲染 HDR MP4:

npx remotion render MyComposition out/hdr.mp4 \
  --codec=h265 \
  --color-space=bt2020-ncl \
  --hdr-mode=dolby-vision

先決條件

  • macOS 13+ 或 Linux with HEVC support
  • 硬體支援 HDR encoding
  • 內容要真的有 HDR 顏色(用 color-space 對應的 P3 顏色)

何時用 HDR:Apple TV 上架、高階 OLED 電視展示、專業影片作品。

💡 HDR 的設定、colour space、監看的完整流程在 /docs/hdr


Step 7:硬體加速(編碼速度 x3)

預設 Remotion 用 CPU 編碼。開啟 GPU 加速:

在 remotion.config.ts:

Config.setHardwareAcceleration("if-possible");

macOS 會用 VideoToolbox,Linux 用 NVENC(需要 NVIDIA GPU)
Windows 用 QSV(Intel)或 NVENC

編碼速度比較(1080p 30fps 60 秒影片):

  • CPU H.264 CRF 18:~120 秒
  • VideoToolbox H.264:~35 秒
  • VideoToolbox HEVC:~50 秒
  • NVENC H.264:~25 秒

注意:硬體編碼的品質通常略遜於 CPU 編碼。但速度快非常多,日常用夠了。

💡 硬體加速設定、各平台差異、品質對比在 /docs/hardware-acceleration


Step 8:加 Metadata 與浮水印

渲染時加影片 metadata:

npx remotion render MyComposition out/video.mp4 \
  --metadata="title=我的影片" \
  --metadata="artist=Debug 土撥鼠"

這些 metadata 會嵌入 MP4 檔案裡,Spotify / Podcast 平台會讀。

浮水印:直接在 Composition 用 <AbsoluteFill> 疊個 Logo 圖就好。不需要渲染後處理。

💡 video-metadataoverlays-watermarks/docs/video-metadata/docs/overlays-watermarks


Step 9:一次渲染所有格式

寫一個腳本同時產 5 種格式:

新建 scripts/render-all.mjs:

import { bundle } from "@remotion/bundler";
import { renderMedia, selectComposition } from "@remotion/renderer";

const bundled = await bundle("./src/index.ts");
const composition = await selectComposition({ serveUrl: bundled, id: "MyComposition" });

const formats = [
  { name: "mp4-h264",  codec: "h264",   outputLocation: "out/video.mp4" },
  { name: "mp4-h265",  codec: "h265",   outputLocation: "out/hevc.mp4" },
  { name: "webm-vp9",  codec: "vp9",    outputLocation: "out/video.webm" },
  { name: "mov-alpha", codec: "prores", outputLocation: "out/alpha.mov", pixelFormat: "yuva444p10le" },
  { name: "gif",       codec: "gif",    outputLocation: "out/video.gif", everyNthFrame: 2 },
];

for (const format of formats) {
  console.time(format.name);
  await renderMedia({ composition, serveUrl: bundled, ...format });
  console.timeEnd(format.name);
}

一行命令產所有格式:node scripts/render-all.mjs

💡 render-all 批量渲染完整範例在 /docs/render-all


Step 10:渲染品質調整與 Scaling

如果想渲染 4K 但 composition 是 1080p:

npx remotion render MyComposition out/4k.mp4 \
  --scale=2 \
  --width=3840 \
  --height=2160

或者反過來,渲染 composition 是 4K 但輸出 1080p 節省空間:
--scale=0.5

💡 render-scalingrender-qualityartifacts/docs/render-scaling/docs/render-quality/docs/artifacts


完成!格式對照表

格式檔案大小透明音訊用途
MP4 H.264通用、YouTube、社群
MP4 H.265iOS / 節省空間
WebM VP9網頁嵌入
MOV ProRes 4444專業剪輯、疊圖
GIF小~中Twitter/Slack 動圖
HDR MP4高階顯示器

本篇涵蓋的官方文件


常見問題

Q:ProRes 4444 檔案超大(2GB / 30 秒),正常嗎? A:正常。ProRes 設計目標是「專業編輯中間檔」,壓縮率低、品質無損、支援 alpha。不適合直接當最終輸出,要再用剪輯軟體轉成 H.264 上架。

Q:透明 WebM 在 Chrome 可以播,Safari 就變黑? A:Safari 歷史上對 WebM alpha 支援很爛。最穩的透明影片方案還是 ProRes(macOS)或 HEVC + alpha(iOS 11+)。網頁用 Lottie 或 SVG 動畫。

Q:GIF 渲染品質很爛、顏色跳動? A:GIF 只有 256 色,是格式限制。改善:

  1. 降低 fps 到 15
  2. --gif-dither=floyd-steinberg 做抖動
  3. 如果要乾淨的動畫,改用 WebM 或 APNG

Q:渲染時 ffmpeg 報「unsupported pixel format」? A:通常是 codec 跟 pixel format 不相容。例如 h264 不吃 yuva444p10le(這是 ProRes 專用)。看 /docs/encoding 的相容性表。


下一步

有問題歡迎到 FB 社群 討論!