taichiのトリセツ① ~mp4とgifで出力~
経緯
taichiに昨日からハマっているので、色々使ってみつつ、適宜情報を共有していこうと思います。今回は、作成したグラフィックをmp4またはgifとして出力するやり方を紹介します。詳しくは公式のドキュメントをご覧ください。taichiについての初めての記事はこちらです。
ffmpegのインストール
動画を出力する際にtaichiはffmpegを使用するので、インストールしていない場合はインストールしてください。
$ sudo apt update
$ sudo apt -y upgrade
$ sudo apt install ffmpeg
スクリプト
今回は試しにリポジトリのexamplesの中にある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は何に使えるか全くわかりませんが、面白いので色々探検してみようと思います(笑)。
間違いや質問、ご意見等ありましたらお気軽にコメントください。頑張って答えますので(笑)。
Author And Source
この問題について(taichiのトリセツ① ~mp4とgifで出力~), 我々は、より多くの情報をここで見つけました https://qiita.com/Hiroaki-K4/items/7607b54fbcfaea171215著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .