azosi · 2026.7.29 01:45 · 조회 1

Remotion Client-side Rendering

브라우저 안에서 직접 영상을 렌더링하는 기능. 사용자가 자기 브라우저에서 mp4를 만들어 다운로드하는 SaaS 등에 적합.


📦 설치

npm i @remotion/renderer

@remotion/renderer는 SSR과 Client-side 양쪽에서 사용. Web APIs 추가 임포트 필요.


🛠️ 기본 사용법: renderMediaOnWeb()

import { renderMediaOnWeb } from "@remotion/renderer";

const { blob } = await renderMediaOnWeb({
  composition: {
    id: "MyComposition",
    width: 1920,
    height: 1080,
    fps: 30,
    durationInFrames: 150,
  },
  serveUrl: "https://my-bucket.s3.amazonaws.com/bundle/index.html",
  inputProps: { title: "Hello" },
});

// blob을 사용자에게 다운로드 제공
const url = URL.createObjectURL(blob);
const a = document.createElement("a");
a.href = url;
a.download = "out.mp4";
a.click();

🖼️ renderStillOnWeb() — 한 프레임

import { renderStillOnWeb } from "@remotion/renderer";

const { blob } = await renderStillOnWeb({
  composition: { /* ... */ },
  serveUrl: "https://...",
  frame: 60,
});

🌐 Serve URL

Client-side는 로컬 번들 빌드가 불가능하므로, 미리 빌드된 번들을 호스팅해야 한다:

# 번들 빌드 후 S3/Vercel Blob/Cloudflare R2 등에 업로드
npx remotion bundle src/index.ts out/bundle

# 또는 Lambda로 deploy
npx remotion lambda sites create --site-name=my-site
# → https://my-bucket.s3.amazonaws.com/sites/my-site/2024-01-01/index.html

📌 Lambda Sites 사용이 가장 간편. https://www.remotion.dev/docs/lambda/sites


🎬 코덱 / 포맷 가용성

getEncodableVideoCodecs() / getEncodableAudioCodecs()로 브라우저가 지원 가능한 코덱을 먼저 확인:

import { canRenderMediaOnWeb, getEncodableVideoCodecs, getEncodableAudioCodecs } from "@remotion/renderer";

if (!canRenderMediaOnWeb()) {
  alert("브라우저가 WebCodecs + WebAssembly를 지원하지 않습니다.");
  return;
}

const videoCodecs = await getEncodableVideoCodecs();
const audioCodecs = await getEncodableAudioCodecs();
console.log("Available video codecs:", videoCodecs);

🧪 WebCodecs 폴리필 (Mediabunny)

Safari 등 WebCodecs 미지원 브라우저는 Mediabunny 폴리필 사용:

import { MediabunnyMetadata } from "@remotion/mediabunny";

const { blob } = await renderMediaOnWeb({
  composition: { /* ... */ },
  serveUrl: "https://...",
  // Mediabunny 자동 적용
});

자세한 호환성: Client-side rendering 호환성


⚠️ 알아둘 점

한계설명
WebCodecs 필수Chrome 94+, Edge 94+, Safari (16.4+)
메모리큰 영상은 브라우저 탭이 죽을 수 있음 → blob URL 사용
CPU 집약사용자가 다른 작업 못함 (워커 권장)
Licenseremotion License는 동일

💡 실전 패턴: Web Worker에서 렌더

// worker.ts
import { renderMediaOnWeb } from "@remotion/renderer";

self.addEventListener("message", async (e) => {
  const { blob } = await renderMediaOnWeb(e.data);
  self.postMessage({ blob });
});

메인 스레드를 막지 않으면서 렌더링.


📚 영역 구분

  • 서버 렌더: Remotion Server-side Rendering (SSR)
  • 클라우드: Remotion Lambda / Cloud Hosting
  • 한글 hub: Remotion 렌더링

상위 문서: ← Remotion 렌더링 출처: Remotion 공식 문서 — Client-side rendering 한글화 (2026-07-29) 공급사: Remotion AG

변경 이력

날짜변경
2026-07-29초판 작성 (공식 Client-side rendering 가이드 한글화)
2026-07-29메타데이터 블록을 본문 하단으로 이동

댓글

아직 댓글이 없습니다.

댓글을 작성하려면 로그인이 필요합니다.