使用 Matplotlib 提取电影帧

PythonPythonBeginner
立即练习

This tutorial is from open-source community. Access the source code

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

本教程将指导你使用Matplotlib从视频中抓取单个帧并将其写入文件的过程。此方法对于生成动画很有用,并且无需集成事件循环即可完成。

虚拟机使用提示

虚拟机启动完成后,点击左上角切换到“笔记本”标签以访问Jupyter Notebook进行练习。

有时,你可能需要等待几秒钟让Jupyter Notebook完成加载。由于Jupyter Notebook的限制,操作验证无法自动化。

如果你在学习过程中遇到问题,随时向Labby提问。课程结束后提供反馈,我们将立即为你解决问题。

导入必要的库

我们首先需要导入生成动画所需的必要库。我们将使用 numpy 来生成随机数,使用 matplotlib 进行绘图,并使用 FFMpegWriter 将帧写入文件。

import numpy as np
import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt
from matplotlib.animation import FFMpegWriter

设置写入器

我们需要设置用于将帧写入文件的写入器。我们设置每秒帧数(fps)并添加诸如标题、作者和注释等元数据。

metadata = dict(title='Movie Test', artist='Matplotlib',
                comment='Movie support!')
writer = FFMpegWriter(fps=15, metadata=metadata)

设置图形

我们创建一个图形,并设置绘图的 x 轴和 y 轴范围。

fig = plt.figure()
plt.xlim(-5, 5)
plt.ylim(-5, 5)

设置绘图

我们创建一个线图,并将初始数据设置为空数组。

l, = plt.plot([], [], 'k-o')

获取帧并写入文件

我们进行100次迭代循环,为x和y坐标生成随机数。我们更新线图的数据,并使用写入器获取帧。最后,我们将帧保存到一个文件中。

x0, y0 = 0, 0

with writer.saving(fig, "writer_test.mp4", 100):
    for i in range(100):
        x0 += 0.1 * np.random.randn()
        y0 += 0.1 * np.random.randn()
        l.set_data(x0, y0)
        writer.grab_frame()

总结

本教程向你展示了如何使用Matplotlib从视频中抓取帧并将其写入文件。我们涵盖了从设置写入器到进行迭代循环以及为绘图生成随机数的必要步骤。这种方法对于在不集成事件循环的情况下生成动画很有用。