在matlab中,如果我有一个数组,即一个矩阵,其第一列是时间,另外两个是坐标,如果我绘制它:
ti=myarray(:,1);
xi=myarray(:,2);
yi=myarray(:,3);
for i=1:length(ti)
plot(xi(i),yi(i));hold on;
Mov(i)=getframe;
end
这会统一录制我的电影。我玩的时候
movie(Mov,1,20)
假设帧是按时间顺序分布的。
我可以制作一个情节,以便电影在指定的时间播放吗?
请注意pause
如果可能,可能不适合我。系统时间很慢(10ms
精度)。并且结合缓慢的matlab处理和低精度的系统时间将产生不希望的结果。另请注意,我的fps
可能会高于100
。但如果可以实施,我欢迎它。
答案 0 :(得分:3)
要创建可变帧速率电影,您可以使用我的QTWriter课程。它是一个易于使用的类文件,受到Matlab的VideoWriter类的启发,允许以适合Matlab风格图形的多种格式本地导出QuickTime编码的电影。不需要任何其他东西,甚至不需要QuickTime(除非你想播放输出文件)。值得注意的是,它支持Quicktime连续改变帧速率的能力。
以下是一些示例代码,用于生成类似于this QuickTime movie的电影:
% Prepare new movie file using the default PNG compression
movObj = QTWriter('peaks.mov');
% Create an animation
hf = figure; Z = peaks; surfc(Z); frames = 100;
axis tight; set(gca,'nextplot','replacechildren');
% Animate plot and write movie
for k = 0:frames
surfc(sin(2*pi*k/frames)*Z,Z);
% Vary the frame-rate
movObj.FrameRate = k;
% Write each frame to the file
writeMovie(movObj,getframe(hf));
end
% Finish writing movie and close file
close(movObj);
在Matlab中,可以通过将readerobj.FrameRate
传递给VideoReader
函数,使用Matlab的movie
类(我在Windows / Linux上对此不确定)来播放可变帧速率QuickTime电影。如果您将输出影片转换为另一种容器格式(例如AVI)或不支持可变帧速率的编解码器(或者如果您的转换软件没有),那么您需要将转换后的影片的帧率设置为最高在QuickTime文件中的帧速率。这可能会导致更大的文件 - 人们可以将帧速率电影视为时间压缩(有点像帧间压缩)。
帧速率参数没有无限的分辨率和范围,因此可能还需要调整'TimeScale'
参数。根据用户硬件,解码的计算成本和数据速率,任何电影都可能难以以高帧率播放。通常情况下,玩家只会丢帧。 QTWriter
还有一个'PlayAllFrames'
选项,强制QuickTime Player渲染每一帧 - 但这可能会导致非实时播放。或者,可以选择“Photo TIFF”压缩类型,它可以以稍大的文件大小为代价更快地解码。
代码是开源的(BSD),托管在Github,我欢迎贡献者。优化和改进仍有很大空间。您可以在project webpage上看到另一个示例和结果影片。