首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用来自fps=1 mp4的FFMpegWriter创建FFMpegWriter视频?

如何使用来自fps=1 mp4的FFMpegWriter创建FFMpegWriter视频?
EN

Stack Overflow用户
提问于 2022-09-15 05:28:31
回答 1查看 35关注 0票数 0

我想创建一个视频来可视化一个小数据集。此数据集仅包含10或20帧数据,我希望将其可视化为每秒一帧,并使用.mp4制作一个FFMpegWriter视频。

但是当我设置fps=1时,结果视频有一个长时间的黑色屏幕,只有一个静止的图像。在那之后,这个.mp4就结束了。代码示例如下:

代码语言:javascript
运行
复制
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,那么视频流得很好,但结束得太快了。我能每秒拍一帧视频吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-16 13:59:19

如前所述,这与matplotlib实现并没有太大的不同,但您可以使用指定的框架打开输出文件,这使您更容易掌握imo。

代码语言:javascript
运行
复制
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()中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73726025

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档