LoginSignup
2
0

More than 3 years have passed since last update.

taichiのトリセツ① ~mp4とgifで出力~

Last updated at Posted at 2020-12-27

経緯

taichiに昨日からハマっているので、色々使ってみつつ、適宜情報を共有していこうと思います。今回は、作成したグラフィックをmp4またはgifとして出力するやり方を紹介します。詳しくは公式のドキュメントをご覧ください。taichiについての初めての記事はこちらです。

ffmpegのインストール

動画を出力する際にtaichiはffmpegを使用するので、インストールしていない場合はインストールしてください。

$ sudo apt update
$ sudo apt -y upgrade
$ sudo apt install ffmpeg

スクリプト

今回は試しにリポジトリのexamplesの中にあるfractal.pyの実行結果を、動画として出力してみます。コメントアウトの追加の下のブロックを、デフォルトのコードに追加しています。

fractal.py
import taichi as ti

ti.init(arch=ti.gpu)

n = 320
pixels = ti.field(dtype=float, shape=(n * 2, n))


@ti.func
def complex_sqr(z):
    return ti.Vector([z[0]**2 - z[1]**2, z[1] * z[0] * 2])


@ti.kernel
def paint(t: float):
    for i, j in pixels:  # Parallized over all pixels
        c = ti.Vector([-0.8, ti.cos(t) * 0.2])
        z = ti.Vector([i / n - 1, j / n - 0.5]) * 2
        iterations = 0
        while z.norm() < 20 and iterations < 50:
            z = complex_sqr(z) + c
            iterations += 1
        pixels[i, j] = 1 - iterations * 0.02


gui = ti.GUI("Julia Set", res=(n * 2, n))
# 追加↓
result_dir = "./results"
video_manager = ti.VideoManager(output_dir=result_dir, framerate=24, automatic_build=False)

for i in range(100):
    paint(i * 0.03)
    # gui.set_image(pixels)
    # gui.show()
    # 追加↓
    pixels_img = pixels.to_numpy()
    video_manager.write_frame(pixels_img)
    print(f'\rFrame {i+1}/100 is recorded', end='')

# 追加↓
video_manager.make_video(gif=True, mp4=True)
print(f'MP4 video is saved to {video_manager.get_output_filename(".mp4")}')
print(f'GIF video is saved to {video_manager.get_output_filename(".gif")}')

デフォルトではgui表示されますが、今回はfor文の中のgui表示処理の代わりに、VideoManagerを使ってframeを動画にしていきます。上のプログラムを実行するとresultsフォルダの下にmp4とgifファイルが作成されます。gifはこんな感じになります。
video.gif

まとめ

taichiは何に使えるか全くわかりませんが、面白いので色々探検してみようと思います(笑)。

間違いや質問、ご意見等ありましたらお気軽にコメントください。頑張って答えますので(笑)。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0