最近有一个在 Powerpoint 中设置倒计时器的需求。由于 Powerpoint 没有提供原生的功能支持,网上找到了一些插件又觉得安装起来不便,所以决定使用一个倒计时视频放置在 Powerpoint 中,即可实现倒计时的功能。
由于不同用户所需要的倒计时时间不同,因此没办法找到用于倒计时的现成视频。因此想到使用 Python 的 Matplotlib 库写一个倒计时视频。代码如下。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| from matplotlib import pyplot as plt from matplotlib.animation import FuncAnimation
total_time = 30 alert_time = 10
REPEAT = 100
fig, ax = plt.subplots(1, 1, figsize=(6, 2.5)) plt.axis("off") plt.tight_layout()
t = ax.text(0.5, 0.5, f"{total_time//60:02d}:{total_time % 60:02d}", verticalalignment="center", horizontalalignment="center", fontdict={"fontsize": 125, "color": "k", "family": "sans-serif", "weight": "bold"})
def animate(i): k = i // REPEAT t.set_text(f"{(total_time - k) // 60:02d}:{(total_time - k) % 60:02d}") if (total_time - k) <= alert_time: t.set_color("r" if k % 2 == 0 else "k")
ani = FuncAnimation(fig, animate, range(1, (total_time + 1) * REPEAT), interval=1000 // REPEAT, repeat=False)
plt.show()
|
这里面 total_time
表示总的倒计时秒数, alert_time
是用来在最后几秒钟,通过闪烁来提醒倒计时即将结束。 REPEAT
是一个常量,表示每一秒的画面持续的帧数。如果使用 1 秒 1 帧的话,最后生成视频的时候会出现时间上的出入。因此这里设置为 1 秒 100 帧,误差就足够小了。
最后注释掉的语句用来把视频保存为 mp4 格式,可以插入 Powerpoint 中。注意现在 Matplotlib 在安装时,不默认安装视频编码器 FFMpeg ,因此需要自行安装。只需要使用
或使用 pip
安装,即可。