You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何制作可设置单帧时长的多色彩Python动图(非GIF)

解决APNG时长不生效及多色彩动图制作方案

一、修复APNG的duration参数问题

你的代码中imageio.mimwrite的duration参数未生效,主要是两个原因导致:

  1. 格式未明确指定:仅靠.png后缀可能无法让imageio识别为APNG格式,需显式声明format="apng"。
  2. 时长单位误解:imageio中APNG的duration单位为毫秒,你设置的4仅代表4毫秒,几乎无停留效果,需改为对应秒数的毫秒值(比如4秒就写4000)。

修改后的关键代码片段:

# 替换原mimwrite行
imageio.mimwrite("out.apng", images, format="apng", duration=4000, loop=0)

同时确保安装了APNG扩展:

pip install imageio[apng]

二、无需外部工具的替代方案

1. 使用WebP格式

WebP支持24位真彩色+透明通道,动画时长设置稳定,且文件体积通常更小,用imageio可直接生成:

# duration单位为秒,loop=0表示无限循环
imageio.mimwrite("out.webp", images, format="webp", duration=4, loop=0)

需先安装WebP扩展:

pip install imageio[webp]

2. 用Matplotlib直接生成动画

无需先保存单帧图片,直接通过matplotlib.animation.FuncAnimation生成动画,效率更高且能直接控制帧时长:

import seaborn as sns
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
import math
import numpy as np
import scipy.stats

vmin = 0
vmax = 0.4

fig, ax = plt.subplots()

def update(frame):
    ax.clear()
    mu = 0
    variance = frame + 0.1
    sigma = math.sqrt(variance)
    x = np.linspace(mu - 3*sigma, mu + 3*sigma, 100)
    row = scipy.stats.norm.pdf(x, mu, sigma)
    matrix = np.array([row for _ in range(100)])
    
    hmap = sns.heatmap(matrix, vmin=vmin, vmax=vmax, cmap="viridis", ax=ax)
    hmap.set_xticklabels([*range(0, 100, 4)])
    cbar = hmap.collections[0].colorbar
    cbar.set_label("Colorbar Label", labelpad=10)
    return ax,

# interval单位为毫秒(4000=4秒),frames为总帧数
ani = FuncAnimation(fig, update, frames=3, interval=4000)

# 保存为WebP格式
ani.save("out_ani.webp", writer="pillow", fps=1/4)
# 若需要MP4格式,安装ffmpeg后可改为:
# ani.save("out_ani.mp4", writer="ffmpeg", fps=1/4)

plt.close()

内容的提问来源于stack exchange,提问作者Simd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 21:22:40