将视频帧直接写入文件,绕过屏幕渲染

时间:2012-03-02 04:02:26

标签: matlab

我正在使用VideoWriter制作一系列情节中的视频。它的工作原理很好(按照this SO answer中的建议)。但是,似乎Matlab尝试在完成动画后将所有3000帧渲染到屏幕上,这会导致我的窗口管理器发生故障,计算机会冻结几分钟。

有没有办法将视频帧直接写入磁盘,绕过屏幕渲染?似乎getframe中的writeVideo(vid, getframe(f))必然会使图形可见;有没有办法避免这种情况?

3 个答案:

答案 0 :(得分:2)

如果你只有3000帧,你可以将它们保存为图像,并使用像ffmpeg这样的图像制作视频。请记住对图像使用无损格式,例如PNG。

答案 1 :(得分:1)

请勿使用get frame,但请使用 im2frame

writerObj = VideoWriter('awesomeMovie.mp4', 'MPEG-4');
open(writerObj);
masterFrame = rand(10,10,3);
f = im2frame(masterFrame);
writeVideo(writerObj,f);

答案 2 :(得分:0)

使用avifile和addframe将允许您创建视频而不将其显示在屏幕上。这似乎是一种较慢的做事方式。

以下是基于推荐帖子的示例:

mov = avifile('myPeaks2.avi','fps',15);
set(gcf, 'visible', 'off')

for k=1:20
    surf(sin(2*pi*k/20)*Z,Z);
    mov = addframe(mov, gcf);
end
mov = close(mov);

当然,这种方法已被弃用,因此最终您将无法使用它。