将“grab_frame”与“FFMpegFileWriter”一起使用会在子进程的图参数中产生错误

问题描述 投票:0回答:1

我想使用由相当复杂的模拟生成的帧生成 MP4 文件。 如果我必须观看这部电影作为生成它的副作用,我不会抱怨太多,但宁愿不在屏幕上“显示”任何内容。 与模拟相比,制作电影的开销微不足道,因此我更关心干净简单的代码而不是性能。

grab_frame
FFMpegFileWriter
一起使用似乎很自然。 下面的代码看起来是正确的。

fig, ax = plot.subplots(figsize=(6.5, 6.5))

assert(animation.FFMpegFileWriter().isAvailable())
writer = animation.FFMpegFileWriter(fig)
writer.setup(fig, "test1.mp4",224)

with writer.saving(fig,"test1.mp4", dpi=224):
    for i in range(len(frameSeg)):
        PlotFrame(i)
        writer.grab_frame()

# writer.finish()

print("done")

它运行,但产生以下错误

[image2 demuxer @ 0000021fab8c1000] 无法将选项值“Figure(650x650)”解析为视频速率 [image2 demuxer @ 0000021fab8c1000] 将选项帧速率设置为值图 (650x650) 时出错。 [in#0 @ 0000021fab8c1e00] 打开输入时出错:参数无效 打开输入文件时出错... AppData\Local\Temp mpe19ci2wz mp%07d.png。 打开输入文件时出错:参数无效

subprocess.CalledProcessError:命令'['ffmpeg','-framerate','图(650x650)','-i','F:\ Users \ Kenne.DESKTOP-BT6VROU \ AppData \ Local \ Temp mpe19ci2wz mp%07d .png'、'-loglevel'、'error'、'-vcodec'、'h264'、'-pix_fmt'、'yuv420p'、'-y'、'test1.mp4']' 返回非零退出状态 4294967274 .

我是否遗漏了

setup
中的某些内容,是安装问题还是错误?

顺便说一句,将

FFMpegWRiter
FuncAnimation
一起使用可以...

ffmpeg matplotlib-animation
1个回答
0
投票

出现错误

writer = animation.FFMpegFileWriter(fig)

FFMpegFileWriter
的第一个参数是
fps
,继承自
MovieWriter

还有,

writer.setup(fig, "test1.mp4",224)

是多余的,因为它被

writer.saving
称为。

和你一样,我不太热衷于

mpl
如何进行视频创作。因此,我为我的
ffmpegio
包创建了一个插件,以将
mpl
图形导出到 FFmpeg 视频。这是一个解决方案。

你首先需要以下2个包

pip install ffmpegio-core ffmpegio-plugin-mpl

然后,上面的脚本可以重写如下:


import ffmpegio as ff

# figure must be set to the final format
fig, ax = plot.subplots(figsize=(6.5, 6.5), dpi=224)

# configure ffmpeg
with ff.open(
    "test1.mp4",
    "wv", # mode: [w]rite a [v]ideo stream
    rate_in=5, # video frame rate, 5 frames/second (mpl default)
) as f:
    for i in range(len(frameSeg)):
        PlotFrame(i)
        f.write(fig)

© www.soinside.com 2019 - 2024. All rights reserved.