我想创建一个视频来可视化一个小数据集。此数据集仅包含10或20帧数据,我希望将其可视化为每秒一帧,并使用.mp4制作一个FFMpegWriter视频。
但是当我设置fps=1时,结果视频有一个长时间的黑色屏幕,只有一个静止的图像。在那之后,这个.mp4就结束了。代码示例如下:
import numpy as np
from matplotlib.animation import FFMpegWriter
np.random.seed(0)
fig, ax = plt.subplots(figsize=(9, 4))
ln, = ax.plot([])
ax.set_xlim([0, 1000])
ax.set_ylim([-1, 1])
ax.grid(True)
writer = FFMpegWriter(fps=1)
with writer.saving(fig, "writer_test.mp4", 300):
for i in range(20):
x = np.arange(1000)
t = np.random.randn(1000)
y = np.sin(2 * np.pi * t)
ln.set_data(x, y)
writer.grab_frame()
plt.show()
如果我把fps改为10,那么视频流得很好,但结束得太快了。我能每秒拍一帧视频吗?
发布于 2022-09-16 13:59:19
如前所述,这与matplotlib
实现并没有太大的不同,但您可以使用指定的框架打开输出文件,这使您更容易掌握imo。
import numpy as np
from matplotlib import pyplot as plt
import ffmpegio
np.random.seed(0)
fig, ax = plt.subplots(figsize=(9, 4),dpi=300)
ln, = ax.plot([])
ax.set_xlim([0, 1000])
ax.set_ylim([-1, 1])
ax.grid(True)
with ffmpegio.open(
"writer_test.mp4", # output file name
"wv", # open file in write-video mode
1, # framerate in frames/second
pix_fmt="yuv420p", # specify the pixel format (default is yuv444p)
overwrite=True
) as writer:
for i in range(20):
x = np.arange(1000)
t = np.random.randn(1000)
y = np.sin(2 * np.pi * t)
ln.set_data(x, y)
writer.write(fig)
可以将任何ffmpeg输出&全局选项作为参数添加到open()
中。
https://stackoverflow.com/questions/73726025
复制相似问题