计算化学公社

 找回密码 Forget password
 注册 Register
Views: 1544|回复 Reply: 2

[综合交流] 分享多帧bmp转gif动画和bmp转png的Python脚本

[复制链接 Copy URL]

1188

帖子

5

威望

2758

eV
积分
4046

Level 6 (一方通行)

发表于 Post on 2021-12-31 09:20:01 | 显示全部楼层 Show all |阅读模式 Reading model
本帖最后由 snljty 于 2022-2-17 16:43 编辑

这些功能用Linux下的convert命令等都能转换,但后者有些涉及图片大小变换等功能设置不合适的时候往往会很慢。VideoMach可以把多帧图片做成动画,但免费版有水印。另外ffmpeg也是一个选择,暂且不提。
两者分别需要imageio和pillow库,可以用pip install imageio pillow或者如果有conda,使用conda install imageio pillow也可以。注意没有管理员权限的时候要在管理员权限的cmd做(这两个脚本Linux下使用也没有问题)。

第一个脚本是将当前目录下所有的bmp文件按照文件名顺序制作成动画。
  1. #! /usr/bin/env python3
  2. # -*- Coding: UTF-8 -*-

  3. import imageio
  4. import os, sys
  5. import argparse

  6. parser = argparse.ArgumentParser(description = "Convert all bmp files to a gif animation.")

  7. parser.add_argument("--duration", type = float, default = 0.1, help = "Duration of each frame")
  8. parser.add_argument("--reverse", type = bool, default = False, help = "Whether reverse the animation or not")
  9. parser.add_argument("--loop", type = int, default = 1, help = "Loop how many times, 0 for infinite")
  10. parser.add_argument("--output", type = str, default = "out.gif", help = "Whether loop the animation or not")

  11. args = parser.parse_args()

  12. images = [imageio.imread(filename) for filename in sorted((fn for fn in os.listdir(".") if fn.endswith(".bmp")), reverse = args.reverse)]
  13. imageio.mimsave(args.output if args.output.endswith(".gif") else ".".join([args.output, "gif"]), images, duration = args.duration, loop =args.loop)

复制代码


有几个参数,用诸如python bmp2gif_animation.py --help可以查看参数用法。具体是--duration指定每帧时长,--reverse指定是否反转动画,--loop指定是循环次数,0是无限循环。--output指定输出文件名。

gif格式动画默认会被输出为工作目录下的out.gif,用浏览器等即可查看。
bmp2gif_animate.py (916 Bytes, 下载次数 Times of downloads: 9)

评分 Rate

参与人数
Participants 6
威望 +1 eV +18 收起 理由
Reason
ggdh + 5
wzkchem5 + 3
joeson + 2 GJ!
puzhongji + 3 实用
sobereva + 1
hdhxx123 + 5 好物!

查看全部评分 View all ratings

312

帖子

1

威望

3106

eV
积分
3438

Level 5 (御坂)

发表于 Post on 2022-1-2 07:26:10 | 显示全部楼层 Show all
好东西,一个小建议:楼主可以把需要调节的参数以变量的形式放在脚本的前几行,这样用起来比较方便。:D

1188

帖子

5

威望

2758

eV
积分
4046

Level 6 (一方通行)

 楼主 Author| 发表于 Post on 2022-1-2 07:41:13 | 显示全部楼层 Show all
exity 发表于 2022-1-2 07:26
好东西,一个小建议:楼主可以把需要调节的参数以变量的形式放在脚本的前几行,这样用起来比较方便。:D

好的谢谢。第二个没有参数,文件名用命令行指定更方便还能Tab键补全文件名。第二个除了loop都放到除了导库以外的最前面了(导库除外,导库不放最前面有时候容易出问题,养成习惯了)。一开始没想到有这个参数,考虑的是另两个用命令行就能指定,只有一个小数和True/False,很容易区分。如果和loop都加上,不加关键词格式的命令行参数就没法识别是给哪个变量的,加了后就比较麻烦也增加记忆量...

本版积分规则 Credits rule

手机版 Mobile version|北京科音自然科学研究中心 Beijing Kein Research Center for Natural Sciences|京公网安备 11010502035419号|计算化学公社 — 北京科音旗下高水平计算化学交流论坛 ( 京ICP备14038949号-1 )|网站地图

GMT+8, 2023-2-2 21:51 , Processed in 0.354684 second(s), 25 queries .

快速回复 返回顶部 返回列表 Return to list