taichi导出:图片、视频、gif

输出成图片

gui = ti.GUI('Ball', (512, 512))
ts = 0 # 定义一个变量
while gui.running:
    ts += 1 # 循环一次加一
    for k in range(100):
        compute_force()
        update()
    gui.clear(0x112F41)
    gui.circles(position.to_numpy(), color=0xfff000, radius=radius)
    gui.line([0.8, 0.2], [0.1, 0.2], color=0xFFF000, radius=1)
    gui.show(f'frame/{ts:04d}.png') # 将每一帧保存下来
    # gui.show()

上面这段代码给出了将结果输出成图片形式。其中最主要是这一句:gui.show(f'frame/{ts:04d}.png'),它会输出图片到 frame 文件夹,4位数字顺序编号,格式为png。
image.png

转成视频

先下载FFmepg

  1. 进入https://www.gyan.dev/ffmpeg/builds/
  2. 选择其中一个下载image.png
  3. 解压存档到指定文件夹中,比如, “D:/YOUR_FFMPEG_FOLDER”;
  4. 关键步骤: 添加路径 D:/YOUR_FFMPEG_FOLDER/bin 到环境变量 PATH 中;
  5. 打开 Windows 下的 cmd 或 PowerShell ,然后输入这行命令ffmpeg -version来测试你的安装是否成功。 如果 ffmpeg 已经正确安装完毕,那么它的版本信息就会被打印出来。

使用ti video 转换成MP4

参考 :https://docs.taichi.graphics/lang/articles/cli_utilities#converting-pngs-to-video

在cmd中进入保存图片的文件夹,然后输入 ti video -f40,然后得到video.MP4,40FPS
如果提示No module named PIL,那么 pip install Pillow

使用FFmepg转成MP4

在命令行中输入:
ffmpeg -framerate 60 -i ./frame/%04d.png -c:v libx264 -r 30 out.mp4

  • 这里的 -framerate 指读取时的帧率,这里输出为 -r 30,所以相当于 60/30=2 倍加速。
    论坛的 gif 大小限制 < 4MB,一定的加速和缩小分辨率有助于减小 gif 大小。
  • -i ./frame/%04d.png 输入文件。
    frame/%04d 和 python 里的统一就行
  • -c:v libx264 x264 编码
  • -r 30 输出 30 fps
  • out.mp4 输出文件名

这样会在项目文件夹中得到一个out.mp4视频
image.png

转成gif

使用ti gif转成gif

得到视频之后,在当前文件夹输入 ti gif -i video.mp4 -f40,然后就得到一个40FPS的gif

使用FFmpeg转成gif

ffmpeg -ss 00:00 -t 5 -i out.mp4 -vf "fps=25,scale=320:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" -loop 0 out.gif
  • -ss 00:00 -t 5 从 00:00 开始,剪辑 5 秒
  • -i out.mp4 输入文件
  • -vf -filter:v 的缩写,视频过滤器,后面的字符串是指定的参数
    • fps=30
    • scale=320:-1 等宽高比缩放到宽 320;lanczos 缩放算法
    • split[s0][s1] 将视频分为两个流 s0, s1
      细节参见 FFmpeg Filters Documentation
    • [s0]palettegen[p] 视频流 s0 生成调色板 p
    • [s1][p]paletteuse 视频流 s1 通过调色板 p 进行下采样
  • -loop 0 gif 无限循环;-1 不循环(只播放一遍)
  • out.gif 输出文件

这样会在项目文件夹中得到一个out.gif的动图

out.gif

师姐用的方法

新建一个.py文件:

import imageio
import os

# def export_gif():
gif_images = []

dirs = os.listdir("F:\\pythonProject1\\frame")
for d in dirs:
    # if d[0:2] == "00":
    gif_images.append(imageio.imread("F:\\pythonProject1\\frame" + "\\" + d))  # 读取多张图片
imageio.mimsave("hello.gif", gif_images, fps=40)   # 转化为gif动画

-------------end----------

参考:https://forum.taichi.graphics/t/homework-0-new-shader-ffmpeg-gif/469

  • 20
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值