使用MATLAB和ffmpeg快速创建电影

时间:2017-08-21 22:47:23

标签: matlab animation video ffmpeg

我有一些我希望制作成电影的时间序列数据。数据可以是2D(约500x10000)或3D(500x500x10000)。对于2D数据,电影帧只是使用plot的线条图,对于3D数据,我们可以使用surfimagesccontour等。然后我们创建一个视频在MATLAB中使用这些帧的文件,然后使用ffmpeg压缩视频文件。

为了快速完成,人们会尝试不渲染所有要显示的图像,也不会将数据保存到磁盘,然后在此过程中再次读取。通常,人们可以使用getframeVideoWriter在MATLAB中创建电影,但如果试图不将图形显示在屏幕上,它们似乎很容易变得棘手。有些人甚至建议在隐藏的数字中绘图,然后将它们作为.png文件保存为磁盘,然后使用ffmpeg(例如使用x265编码器将其压缩为.mp4)。但是,在我的iMac中保存imagesc的输出第一次需要3.5秒,然后是0.5秒。我还发现将这么多文件保存到磁盘只是为了让ffmpeg再次读取它们的速度不够快。一个人可以hardcopy建议plot数据,但我不确定它是否有效,无论绘图方法如何(例如surfffmpeg等),以及如何将数据传输到immovie,只需最少的磁盘访问。

这与this类似,但Route::get( 'foopage', function(){ return view( 'templates.foo' ); });太慢了。这篇文章this是类似的,但主张将图像写入磁盘然后读取它们(缓慢的IO)。

1 个答案:

答案 0 :(得分:0)

也许您要做的是通过执行surfimagesccontour正在执行的同类操作将数据转换为图像然后再写它直接写入文件,这将把所有数据保存在内存中,直到需要写入为止。

我对真实图像的经验很少,也可以在这里工作: 我看到调用imshow需要花费很多时间,但更改CData函数创建的预设图形的imshow花了大约5ms,所以,也许你可以使用任何一个来设置一个数字您喜欢的功能,然后更新基础XDataYData等,以便图形以相同的方式更新?

祝你好运!