GitHub - remotion-dev/remotion: ๐ฅ Make videos programmatically with React
ํต์ฌ ํฌ์ธํธ
- 1Remotion์ React๋ฅผ ํ์ฉํ์ฌ ๋น๋์ค๋ฅผ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ผ๋ก ์ ์ํ ์ ์๋ ํ๋ ์์ํฌ์ ๋๋ค.
- 2์ด ํ๋ ์์ํฌ๋ CSS, Canvas, SVG, WebGL ๋ฑ ์น ๊ธฐ์ ๊ณผ ํ๋ก๊ทธ๋๋ฐ ๊ฐ๋ ์ ํ์ฉํ์ฌ ๋ค์ํ ํจ๊ณผ๋ฅผ ๊ตฌํํ๋ฉฐ, React์ ์ฌ์ฌ์ฉ์ฑ๊ณผ ๊ฐ๋ ฅํ composition ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
- 3์ฌ์ฉ์๋ `npx create-video@latest` ๋ช ๋ น์ด๋ก ์ฝ๊ฒ ์์ํ ์ ์์ผ๋ฉฐ, Remotion์ ํน์ ๊ฒฝ์ฐ์ ํ์ฌ ๋ผ์ด์ ์ค๋ฅผ ์๊ตฌํ๋ ํน๋ณํ ๋ผ์ด์ ์ค ์ ์ฑ ์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
Remotion์ React๋ฅผ ํ์ฉํ์ฌ ๋์์์ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ผ๋ก ์ ์ํ๊ธฐ ์ํ ํ๋ ์์ํฌ์ ๋๋ค. ์ด ํ๋ก์ ํธ์ ํต์ฌ ๋ฐฉ๋ฒ๋ก ์ ์ ํต์ ์ธ ๋์์ ํธ์ง ์ํฌํ๋ก์ฐ๋ฅผ ์ํํธ์จ์ด ๊ฐ๋ฐ ํจ๋ฌ๋ค์์ผ๋ก ์ ํํ์ฌ, React์ ์ ์ธ์ (declarative) ํน์ฑ๊ณผ ์น ๊ธฐ์ ์ ๊ด๋ฒ์ํ ์ํ๊ณ๋ฅผ ํ์ฉํ๋ ๋ฐ ์์ต๋๋ค.
ํต์ฌ ๋ฐฉ๋ฒ๋ก ๋ฐ ๊ธฐ์ ์ ์ค๋ช :
- React ๊ธฐ๋ฐ์ ๋์์ ๊ตฌ์ฑ: Remotion์ ๋์์์ ๊ฐ ์ฅ๋ฉด, ์์, ์ ๋๋ฉ์ด์ ์ React ์ปดํฌ๋ํธ(component)๋ก ์ ์ํฉ๋๋ค. ์ด๋ ์น UI๋ฅผ ๊ตฌ์ถํ๋ ๋ฐฉ์๊ณผ ์ ์ฌํ๊ฒ, ๋์์์ ์๊ฐ์ ์์๋ฅผ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ๊ณ ์กฐํฉ ๊ฐ๋ฅํ ๋จ์๋ก ์ถ์ํํฉ๋๋ค. ๊ฐ๋ฐ์๋ React์ JSX ๋ฌธ๋ฒ์ ์ฌ์ฉํ์ฌ ์๊ฐ์ ํ๋ฆ์ ๋ฐ๋ฅธ ์๊ฐ์ ๋ณํ๋ฅผ ์ ์ธ์ ์ผ๋ก ๋ช ์ํ๋ฉฐ, ์ด๋ฅผ ํตํด ๋์์์ ๊ตฌ์กฐ์ ๋์์ ์ฝ๋๋ก์ ๋ช ํํ๊ฒ ํํํ ์ ์์ต๋๋ค.
- ์น ๊ธฐ์ ์ ํตํ ๋ ๋๋ง(Rendering): Remotion์ ๋์์ ์ฝํ
์ธ ๋ฅผ ๋ ๋๋งํ๊ธฐ ์ํด ํน์ ์ํํธ์จ์ด์ ๋
์ ์ ์ธ ์์ง ๋์ ์น ํ์ค ๊ธฐ์ ์ ์ฌ์ฉํฉ๋๋ค.
- CSS (Cascading Style Sheets): ๋ ์ด์์, ์คํ์ผ๋ง, ๊ทธ๋ฆฌ๊ณ
transform,opacity์ ๊ฐ์ ๊ธฐ๋ณธ์ ์ธ ์ ๋๋ฉ์ด์ ์ ์ํด CSS ์์ฑ๊ณผ ํธ๋์ง์ (transition)์ ํ์ฉํฉ๋๋ค. - HTML Canvas API: 2D ๊ทธ๋ํฝ, ๋นํธ๋งต ์กฐ์, ๊ทธ๋ฆฌ๊ณ ํฝ์ ๋จ์์ ์ปค์คํ ๋๋ก์์ ์ฌ์ฉ๋์ด ๋ณต์กํ ์๊ฐ ํจ๊ณผ๋ฅผ ๊ตฌํํฉ๋๋ค.
- SVG (Scalable Vector Graphics): ํด์๋์ ๋ ๋ฆฝ์ ์ธ ๋ฒกํฐ ๊ทธ๋ํฝ์ ์ฌ์ฉํ์ฌ ๊ณ ํ์ง์ ๋ํ, ์์ด์ฝ, ํ ์คํธ ์ ๋๋ฉ์ด์ ์ ๊ตฌํํฉ๋๋ค.
- WebGL (Web Graphics Library): GPU ๊ฐ์์ ํ์ฉํ์ฌ ๊ณ ์ฑ๋ฅ 3D ๊ทธ๋ํฝ, ์ ฐ์ด๋(shader) ๊ธฐ๋ฐ์ ๋ณต์กํ ์๊ฐ ํจ๊ณผ, ๊ทธ๋ฆฌ๊ณ ์ค์๊ฐ ๋ ๋๋ง์ด ํ์ํ ๊ณ ๊ธ ์ ๋๋ฉ์ด์ ์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
- CSS (Cascading Style Sheets): ๋ ์ด์์, ์คํ์ผ๋ง, ๊ทธ๋ฆฌ๊ณ
- ํ๋ก๊ทธ๋๋ฐ์ ์ ์ด ๋ฐ ๋์ ์ฝํ ์ธ ์์ฑ: React์ ๊ฐ๋ ฅํ JavaScript ๊ธฐ๋ฐ ํน์ฑ์ ํตํด, ๋์์์ ๋ชจ๋ ์ธก๋ฉด์ ๋ณ์(variable), ํจ์(function), API ํธ์ถ์ ํตํด ๋์ ์ผ๋ก ์ ์ดํ ์ ์์ต๋๋ค. ์ด๋ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ์ธํ๋(personalized) ๋์์, ์๊ณ ๋ฆฌ์ฆ์ ์ผ๋ก ์์ฑ๋๋ ์ ๋๋ฉ์ด์ , ๋๋ ์ธ๋ถ ๋ฐ์ดํฐ ์์ค์ ์ฐ๋ํ์ฌ ์ค์๊ฐ์ผ๋ก ์ ๋ฐ์ดํธ๋๋ ์ฝํ ์ธ ๋ฅผ ์ ์ํ๋ ๋ฐ ์ ์ฉํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ฌ์ฉ์์ ์ ๋ ฅ์ด๋ ์ธ๋ถ API ์๋ต์ ๋ฐ๋ผ ๋์์์ ํ ์คํธ, ์ด๋ฏธ์ง, ๊ทธ๋ํ ๋ฑ์ ๋ค๋ฅด๊ฒ ๋ ๋๋งํ ์ ์์ต๋๋ค.
- React ์ํ๊ณ ํ์ฉ:
- ์ปดํฌ๋ํธ ์ฌ์ฌ์ฉ์ฑ(Reusability) ๋ฐ ํฉ์ฑ(Composition): React์ ํต์ฌ ๊ฐ์ ์ธ ์ปดํฌ๋ํธ ๋ชจ๋ธ์ ๋์์ ์ ์์์๋ ๋์ผํ๊ฒ ์ ์ฉ๋ฉ๋๋ค. ํ ๋ฒ ๋ง๋ ์ ๋๋ฉ์ด์ ์ปดํฌ๋ํธ๋ ๊ทธ๋ํฝ ์ปดํฌ๋ํธ๋ฅผ ๋ค๋ฅธ ๋์์ ํ๋ก์ ํธ์์ ์ฝ๊ฒ ์ฌ์ฌ์ฉํ๊ฑฐ๋, ์ฌ๋ฌ ์ปดํฌ๋ํธ๋ฅผ ์กฐํฉํ์ฌ ๋ณต์กํ ์ฅ๋ฉด์ ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
- ๋น ๋ฅธ ์๋ก๊ณ ์นจ(Fast Refresh): ๊ฐ๋ฐ ์ค ์ฝ๋ ๋ณ๊ฒฝ ์ฌํญ์ด ์ฆ์ ๋์์ ๋ฏธ๋ฆฌ๋ณด๊ธฐ์ ๋ฐ์๋์ด, ์ดํฐ๋ ์ด์ (iteration) ์๋๋ฅผ ํฌ๊ฒ ํฅ์์ํต๋๋ค.
- Node.js ๋ฐ NPM/Bun ํจํค์ง ์ํ๊ณ: JavaScript ๊ธฐ๋ฐ์ ๋ฐฉ๋ํ ์คํ ์์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๊ตฌ๋ฅผ ๋์์ ์ ์ ๊ณผ์ ์ ํตํฉํ์ฌ, ๋ฐ์ดํฐ ์ฒ๋ฆฌ, ์ด๋ฏธ์ง ์กฐ์, ๋คํธ์ํฌ ์์ฒญ ๋ฑ ๋ค์ํ ๊ธฐ๋ฅ์ ํ์ฉํ ์ ์์ต๋๋ค.
- ๋ ๋๋ง ํ์ดํ๋ผ์ธ: Remotion์ React ์ปดํฌ๋ํธ๋ก๋ถํฐ ์น ๊ธฐ์ ์ ํตํด ์๊ฐ์ ํ๋ ์(frame)์ ๋ ๋๋งํ ํ, ์ด๋ฅผ ์ผ๋ จ์ ์ด๋ฏธ์ง ์ํ์ค๋ ๋น๋์ค ์ฝ๋ฑ์ ์ฌ์ฉํ์ฌ ์ต์ข
MP4 ํ์ผ ๋ฑ์ผ๋ก ์ธ์ฝ๋ฉํ๋ ๋ ๋๋ง ํ์ดํ๋ผ์ธ์ ์ ๊ณตํฉ๋๋ค. ์ด ๊ณผ์ ์ ์ผ๋ฐ์ ์ผ๋ก
Node.jsํ๊ฒฝ์์ ์คํ๋ฉ๋๋ค.
์์ฝํ์๋ฉด, Remotion์ ์น ๊ฐ๋ฐ์๊ฐ ์ต์ํ React ๋ฐ ์น ๊ธฐ์ ์คํ์ ํ์ฉํ์ฌ ๋์์์ ์ฝ๋๋ก ์ ์ํ ์ ์๋๋ก ์ง์ํจ์ผ๋ก์จ, ๋์์ ์ ์์ ๋์ฑ ์ ์ฐํ๊ณ , ์๋ํ๋๋ฉฐ, ํ๋ก๊ทธ๋๋ฐ ๊ฐ๋ฅํ ์์ญ์ผ๋ก ํ์ฅํ๋ ํ๋ ์์ํฌ์ ๋๋ค.