経緯
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はこんな感じになります。
まとめ
taichiは何に使えるか全くわかりませんが、面白いので色々探検してみようと思います(笑)。
間違いや質問、ご意見等ありましたらお気軽にコメントください。頑張って答えますので(笑)。