メインコンテンツまでスキップ

1. Overview

Remotionについて

Remotionとは?

Remotionは、Reactコンポーネントを元に動画をつくれるライブラリ。Remotion AGという企業が中心になって開発されている。

動画にしたいReactコンポーネントをCompositionというコンポーネントに渡してやることで、動画としてレンダリングすることができる。Reactコンポーネントのなかでは、useCurrentFrame()というフックから「動画にしたときに何フレーム目にあたるか」を表す値を取得できるため、この値に応じてstyle属性などを変化させることでアニメーションをつくることができる。

動画ファイルを書き出す大雑把な仕組みとしては、@remotion/bundlerでCompositionを何らかの静的なWebページに変換したうえで、@remotion/rendererがフレームを進めながらpuppeteer + chrome-headless-shellを使ってスクリーンショットを撮影、バンドルされているffmpegを使ってスクリーンショットを動画にまとめるといったことをしているらしい。

Compositionは、Remotion StudioというWebアプリを使って動画ファイルとして書き出さずにプレビューできるほか、@remotion/playerというライブラリを使って動画プレイヤー風のReactコンポーネントとしてReactアプリに埋め込むこともできる。

また、動画ファイルの書き出しに、AWS Lambdaを利用できる仕組みなども用意されている。詳しくはServer-Side Renderingを参照のこと。

ライセンス

Remotionはソースコードこそ公開されているものの、OSSではないRemotion Licenseという独自ライセンスが適用される1。基本的に、個人開発の場合についてのみ商用利用含め無料で利用でき、Remotionを使用する開発者が複数人いる事業所においてはライセンスを購入する必要がある。ライセンスの購入はLicensing | Remotion Pro からおこなえる。

使い方のイメージ

たとえば、次のような動画をReactコンポーネントとして書くことができる。

0

0:00 / 0:06

ポイントとして、動画にするためのReactコンポーネントは透過的なものでなければならない。RemotionによるReactコンポーネントのレンダリングは、pupetteerのインスタンスを複数立ち上げたうえで並列しておこなわれるため、インスタンス間で同期しない値に応じてコンポーネントの見た目が変化するような書き方をすると、動画ファイルにまとめたときにフレームが上手くつながらず、動きが無秩序にブレてしまう。

したがって、たとえば、CSSアニメーションやMath.random()などは、基本的にこれらのコンポーネントの中で使ってはいけない。この点についてはFlickeringに詳しく書かれている。

この資料のねらい

この資料では「Remotionでこういうのがつくれそう」ということをなんとなく把握できるような作例をまとめる。

Remotionを使って製作されている動画の例は、次のページにもまとめられているが、これらを見てRemotionを活用できるようになるのはなかなか難しいだろうと思われる。

そこで、もうすこし基本的なクリエイティブコーディングの作例っぽいものを個人的な練習がてらまとめたいと思い、この資料を用意することにした。

個人的な練習なので、必ずしも綺麗なコードを掲載しているわけではない。また、RemotionのAPIについてのわかりやすい説明はしない。Remotionの使い方を知りたい場合、公式のドキュメントを読んでもらいたい。

Footnotes

  1. coreではない一部のパッケージのなかにはMITライセンスなどが適用されているものもある