如何正确启用matplotlib.animation的ffmpeg?
在数据科学领域,可视化是非常重要的一项工作。而matplotlib作为Python中最广泛使用的可视化库之一,也提供了许多有用的绘图工具。其中,animation模块允许我们创建动态的、交互式的图形,并可以方便地保存这些动画为视频文件。然而,要使用matplotlib.animation的ffmpeg作为视频生成工具却并不是一件容易的事情。本文将带领读者探究如何正确启用matplotlib.animation的ffmpeg。
安装ffmpeg
首先,我们需要安装ffmpeg,如果已经安装,可以跳过此步骤。ffmpeg是开源的、跨平台的视频和音频处理工具,提供了各种各样的音视频编辑功能。它支持多种视频编解码器,可以将各种不同格式的文件转换成avi、mp4等常见格式。
对于Ubuntu和Debian用户,执行以下命令即可:
sudo apt-get install ffmpeg
对于macOS用户,可以使用Homebrew进行安装:
brew install ffmpeg
对于Windows用户,可以从官网下载安装包并安装。
测试ffmpeg是否正确安装
在安装完ffmpeg后,我们需要测试其是否正确安装。命令行中运行以下命令:
ffmpeg -h
如果命令行返回ffmpeg的版本信息,即表示安装成功。否则,请检查ffmpeg是否正确安装。
启用matplotlib.animation的ffmpeg
一旦我们确认ffmpeg已经正确安装,接下来是让matplotlib使用ffmpeg创建视频的过程。在matplotlib中使用ffmpeg创建动画的默认方式是使用内置的FFMpegWrite器。
首先,我们需要将FFMpegWrite器实例化,并将其指定为matplotlib动画模块中FigureCanvas的writer,如下所示。
import matplotlib.pyplot as plt
import matplotlib.animation as animation
fig = plt.figure()
# Instantiate FFMpegWriter
Writer = animation.writers['ffmpeg']
# Use FFMpegWriter to write frames as video
writer = Writer(fps=15, metadata=dict(artist='Me'), bitrate=1800)
# Set the writer as the canvas's writer
canvas = animation.FigureCanvas(fig)
canvas.print_figure("output.gif", dpi=80)
这个方法对于生成非常简单的动画是够用的,但是如果需要自定义FFMpegWriter的设置,我们需要使用更为复杂的方法。下面是一个更复杂的设置方法:
import matplotlib.pyplot as plt
import matplotlib.animation as animation
# Step 1: Instantiate FFMpegWriter
Writer = animation.writers['ffmpeg']
writer = Writer(fps=15, metadata=dict(artist='Me'), bitrate=1800)
# Step 2: Define the function used to animate the figure
def animate(i):
plt.plot([0, 1, 2], [i, i+1, i+2])
# Step 3: Instantiate our figure
fig = plt.figure()
# Step 4: Create the animation with the FFMpegWriter
ani = animation.FuncAnimation(fig, animate, frames=10, repeat=True)
ani.save('output.mp4', writer=writer)
在上面的代码中,我们定义了一个函数animate(),它将在每个Frame中执行。接着,我们实例化一个Figure并将它作为参数传递给FuncAnimation()函数,该函数将动画帧传递给animate()函数。最后,我们将ani对象保存为video格式的文件。
适当设置matplotlib的rcParams
在做好以上设置后,我们还需要对matplotlib的rcParams进行适当的设置。rcParams控制着matplotlib的所有默认属性,因此,我们可以通过修改rcParams来自定义图形的样式。但当我们使用FFMpegWriter录制视频时,过大的rcParams会引起无法录制的问题。
因此,我们需要使用以下方式进行设置:
import matplotlib
matplotlib.rcParams.update({'figure.max_open_warning': 0, 'figure.dpi': 100, 'font.size': 10})
这将限制matplotlib创建的图形数量,并使其更加适合用于录制视频。
使用ffmpeg的更多选项
除了上述方法,我们还可以使用FFMpegWriter更多的选项设置来控制生成的视频。例如,可以通过下列代码将帧选项设置为每秒10帧(fps=10),以及设置输出视频的分辨率为640×480像素(dpi=100)
import matplotlib.pyplot as plt
import matplotlib.animation as animation
Writer = animation.writers['ffmpeg']
writer = Writer(fps=10, metadata=dict(artist='Me'), bitrate=1800, extra_args=['-s', '640x480'])
def animate(i):
plt.plot([0, 1, 2], [i, i+1, i+2])
fig = plt.figure()
ani = animation.FuncAnimation(fig, animate, frames=10, repeat=True)
ani.save('output.mp4', writer=writer)
在上面的代码中,我们传递了一个参数列表[‘-s’, ‘640×480’]给FFMpegWriter的extra_args参数,这个参数列表告诉FFMpeg使用640×480像素的分辨率记录视频。
结论
本文介绍了如何正确启用matplotlib.animation的ffmpeg,通过安装ffmpeg、测试是否正确安装、实例化FFMpegWrite器、适当设置matplotlib的rcParams以及使用ffmpeg的更多选项等几个步骤。这些步骤让使用matplotlib.animation的FFMpegWriter可以更加容易地创建高质量的动画视频。