【问题标题】:Fast movie creation using MATLAB and ffmpeg使用 MATLAB 和 ffmpeg 快速创建电影
【发布时间】:2017-08-21 22:47:22
【问题描述】:

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

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

这类似于this,但immovie 太慢了。这篇3 的帖子类似,但主张将图像写入磁盘然后读取它们(IO 慢)。

【问题讨论】:

    标签: matlab animation video ffmpeg


    【解决方案1】:

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

    我对也可以在这里使用的真实图像几乎没有经验: 我看到调用imshow 需要很多时间,但是更改imshow 函数创建的预设图形的CData 大约需要5ms,所以,也许你可以使用任何你喜欢的函数来设置一个图形,并且然后更新底层的XDataYData 等,以便图形以相同的方式更新?

    祝你好运!

    【讨论】:

    • 不敢相信你真的挖出了这个几乎死掉的帖子。好的!您是否尝试过实施您的建议,看看它是否有效?
    猜你喜欢
    • 1970-01-01
    • 2010-12-02
    • 1970-01-01
    • 1970-01-01
    • 2017-03-12
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 2010-11-19
    相关资源
    最近更新 更多