我想使用由相当复杂的模拟生成的帧生成 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
一起使用可以...
出现错误
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)