【发布时间】:2012-03-08 13:24:43
【问题描述】:
在 Linux 下运行 Matlab R2011b,我正在使用 VideoWriter 生成视频。我的代码是这样的:
h_fig = figure();
set(h_fig, 'Visible', 'on')
set(h_fig, 'Position', [300,200,898,720]);
h_axs = axes('Parent', h_fig);
set(h_axs,'nextplot','replacechildren');
vidObj = VideoWriter('leadfollow3.avi');
...
for i = 1:n
h_axs_a = subplot(3,2,[1 2]);
plot(h_axs_a, x, a_mag_lead, x, a_mag_follow, 'r');
...
情节由几个子情节组成。第一个子图渲染得很好,但对于其余部分,轴背景保持灰色而不是白色。更糟糕的是,对于某些帧,它会切换为白色,导致视频中出现烦人的闪烁 (see example video here)。视频编写器循环之外的单个绘图不显示此工件。解决此问题的最佳策略可能是什么?
编辑:在我有机会在 Windows 上尝试此代码后,似乎问题仅限于 Linux。尽管如此,我仍然非常想知道一个可能的解决方案,因为我无法定期访问我可以进行计算的 Windows 框。
【问题讨论】:
-
在 linux 上,我更喜欢将每一帧导出为 png 并使用 ffmpeg 进行压缩。
-
这似乎是一个共同的主题......我尝试了这种方法,它有点慢,导致帧率不正确;我想我得再试一次。
-
我更喜欢另存为 jpge,并使用可笑的命令
cat *.jpg > out.mjpeg创建一个 mjpeg - 然后您可以使用 ffmpeg 将其转换为您想要的。与@Memming 相同的故事,但我从 mjpeg 开始的 ffmpeg 比试图传递疯狂的论点要好。 -
+1 表示@Memming 的建议。我还花了一些时间从 Matlab 导出视频,最后最简单的解决方案是导出单个帧并使用另一个程序创建视频。 (在我的例子中是 Quicktime。)另外,跳舞很棒!
标签: matlab