数式やグラフからYouTubeに使えるアニメーションを作るには

YouTubeの科学・技術系の動画を視聴していると、とてもきれいなアニメーションが使われていることがよくありますね。自分が動画を作るときも、波形やグラフを入れたいなあと思うことがありますが、なかなか良いツールが見つかりません。以前には、きゅうべえというツールを使って動画を作ったこともありました。

YouTubeの自分の動画は、現在は撮影はWebカメラ(LogicoolのC920など)で、音声の波形を入れるときはSOCALABSの無料のVSTiのOscilloscopeのウインドウをOBS Studioで合成しています。静止画は後から編集で入れています。

ブロック図やグラフなどは静止画でよければスプレッドシートや、Pythonのmatplotlibを使うのが手っ取り早いですが、その延長でグラフを動画にしたいとなると、スプレッドシートではちょっと難しいですね。

まさにこういった目的のために作られたPythonパッケージ「Manim」を、ちょっとかじってみました。これは平たく言えば、Pythonを使って静止画を大量に描画し、それをFFmpegで動画にエンコードするためのツールキットです。ポイントは数学と親和性が高い設計になっていることで、数式はLaTeXで美しく表示できますし、グラフ描画のためのツールも充実しています。

作りたいアニメーションの内容をPythonで書き下す必要があるので、それなりにハードルは高いのですが、出力の品質はとても良いです。

この10秒ほどの動画は、私のノートPCで数十秒で生成できました。動画といってもアニメーションなので圧縮効率が非常に高く、H.264の720pですがファイルサイズは148KBしかありません。

この動画を生成するコードはManimのサンプルにあったものです。全体で90行弱あるのでここには載せませんが、興味のある方はリンク先を参照してください。

Manimでは、アニメーションはPythonのクラスとして定義し、動画を生成する際にはそのクラスのconstructメソッドが呼ばれます。このコードでは以下のようになっています。

class SineCurveUnitCircle(Scene):
    # contributed by heejin_park, https://infograph.tistory.com/230
    def construct(self):
        self.show_axis()
        self.show_circle()
        self.move_dot_and_draw_curve()
        self.wait()

Manimで動画に登場する図形はMobject(Moving Object)として定義されており、そのplay()メソッドを呼ぶことでアニメーションが生成されます。上のコードではアニメーションのメイン部分はmove_dot_and_draw_curve()で、このメソッドの中でMobjectであるDot(円周上を動いている黄色い点)の動作(軌道や、1フレームごとの座標の更新など)が定義されています。(このサンプルでは、play()の代わりにwait()でアニメーションが生成されているようです。)

Manimには派生版やそれを元にした解説がいろいろあるようですが、「コミュニティ版」がドキュメントが充実していてお勧めだそうです。
こちらにYouTubeでのチュートリアルがあります。インストールしなくても、例題はJupyterNotebookで簡単に動かすことができます。

コミュニティのドキュメントはこちらです。これも解りやすくてお勧めです。

Manim Community Edition
Animating technical concepts is traditionally pretty tedious since it can be difficult to make the animations precise en...

コメント

This website stores cookies on your computer. These cookies are used to provide a more personalized experience and to track your whereabouts around our website in compliance with the European General Data Protection Regulation. If you decide to to opt-out of any future tracking, a cookie will be setup in your browser to remember this choice for one year.

Accept or Deny

タイトルとURLをコピーしました