Programmatic video production with Remotion on MiniPC.
Environment
- Project:
$HOME/remotion-videos(MiniPC) - Run:
npx remotion render <CompositionId> out/video.mp4 - ffmpeg: Installed
- Transfer: Transfer to Mac Studio via MiniPC HTTP server (9877) + curl
Core Concepts
Composition = unit of video
<Composition
id="MyVideo"
component={MyComponent}
durationInFrames={150} // 30fps × 5초 = 150프레임
fps={30}
width={1920}
height={1080}
/>
Time Control
const frame = useCurrentFrame(); // 현재 프레임
const { fps, durationInFrames } = useVideoConfig();
// 보간 (interpolate)
const opacity = interpolate(frame, [0, 30], [0, 1], {
extrapolateRight: 'clamp'
});
// 스프링 애니메이션
const scale = spring({ frame, fps, config: { damping: 200 } });
Sequencing
<Sequence from={0} durationInFrames={60}>
<IntroScene />
</Sequence>
<Sequence from={60} durationInFrames={90}>
<MainContent />
</Sequence>
Key Patterns
Using Assets
- Image:
<Img src={staticFile('logo.png')} /> - Video:
<OffthreadVideo src={staticFile('clip.mp4')} /> - Audio:
<Audio src={staticFile('bgm.mp3')} volume={0.5} /> - Font: Google Fonts —
loadFont("Noto Sans KR") - Local Font: Place in public/ folder
Subtitles/Captions
@remotion/captionsUse package- Load JSON/SRT subtitle file → synchronize timestamps
Transitions
@remotion/transitions— slide, fade, wipe 등<TransitionSeries>Scene transition with component
Tailwind CSS
@remotion/tailwindclassName available after setup
3D Content
@react-three/fiber+@remotion/three- Synchronize Three.js scene with Remotion timeline
Rendering
# 기본 렌더링
cd $HOME/remotion-videos
npx remotion render MyVideo out/video.mp4
# 고품질
npx remotion render MyVideo out/video.mp4 --codec h264 --crf 18
# 투명 배경 (WebM)
npx remotion render MyVideo out/video.webm --codec vp8
# GIF
npx remotion render MyVideo out/animation.gif --every-nth-frame 2
Production Workflow
- Planning: Decide scene composition, length, resolution
- Asset Preparation: Images, music, fonts → public/ folder
- Component Coding: Build each scene with React
- Preview:
npx remotion studio(MiniPC browser) - Rendering: headless rendering → MP4/WebM
- Transfer: Deliver to Mac Studio via HTTP server
⚠️ Notes
- Subagent Delegation — Video rendering is time-consuming
- 30fps default — Change to 60fps if needed
- Watch Memory — Be mindful of MiniPC RAM limits for high resolution + long videos
- Cannot push to GitHub (MiniPC) — push from Mac Studio