在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处理速度慢和系统时间精度低相结合,会产生不理想的结果还要注意,myfps可以比100更高但如果这能实现,我欢迎。

最佳答案

要创建可变帧速率电影,可以使用myQTWriter类这是一个简单易用的类文件,灵感来自于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中,通过将VideoReader传递给readerobj.FrameRate函数,可以使用Matlab的movie类(在Windows/Linux上我不确定这一点)回放可变帧速率QuickTime电影如果将输出电影转换为不支持可变帧速率的其他容器格式(例如AVI)或编解码器(或者如果转换软件不支持可变帧速率),则需要将转换电影的帧速率设置为QuickTime文件中的最高帧速率这很可能导致更大的文件-人们可以认为或可变帧速率电影是临时压缩的(有点像帧间压缩)。
framerate参数没有无限的分辨率和范围,因此可能还需要调整'TimeScale'参数根据用户的硬件、解码的计算成本和数据速率,任何电影都可能难以以高帧率播放通常情况下,玩家只会丢帧QTWriter还有一个'PlayAllFrames'选项,强制QuickTime播放器渲染每一帧-但这可能会导致非实时播放或者,可以选择“Photo TIFF”压缩类型,该压缩类型以稍大的文件大小为代价,解码速度更快。
代码是开源的(BSD),托管在Github上,我欢迎贡献者优化和改进的空间还很大您可以在project webpage上看到另一个示例和生成的电影。

07-27 13:36
查看更多