matlab - Matlab 中的可变帧率动画

标签 matlab time plot

在 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。但如果这能实现,我欢迎。

最佳答案

要创建可变帧率电影,您可以使用我的 QTWriter类(class)。这是一个简单易用的类文件,灵感来自 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 中,可以使用 Matlab 的 VideoReader 播放可变帧率的 QuickTime 电影。通过将 readerobj.FrameRate 传递给 movie 类(我不确定在 Windows/Linux 上是否如此)功能。如果您将输出电影转换为另一种容器格式(例如 AVI)或不支持可变帧率的编解码器(或者如果您的转换软件不支持),那么您需要将转换后电影的帧率设置为最高QuickTime 文件中的帧率。这很可能会导致更大的文件 - 人们可以认为或可变帧率电影是临时压缩的(有点像帧间压缩)。

帧率参数没有无限分辨率和范围,因此可能还需要调整 'TimeScale' 参数。根据用户硬件、解码的计算成本和数据速率,任何电影都可能难以以高帧率播放。通常,玩家只会掉帧。 QTWriter 还有一个 'PlayAllFrames' 选项强制 QuickTime Player 渲染每一帧 - 然而这可能会导致非实时播放。或者,可以选择“Photo TIFF”压缩类型,这种压缩类型的解码速度更快,但文件大小稍大一些。

代码是开源的 (BSD),托管于 Github ,我欢迎贡献者。还有很大的优化和改进空间。您可以在 project webpage 上看到另一个示例和生成的电影。 .

关于matlab - Matlab 中的可变帧率动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17550038/

相关文章:

python - 将matlab结构导入python

php - 尽管有一些被裁剪,如何识别相似的图像?

date - 如何在 Go 语言中生成随机日期?

python - 一行散点图标签 - Matplotlib

python - 如何在分组条形图中的每个条形图顶部显示条形值

matlab - 如何在 Matlab 中绘制带通滤波器传递函数的频率响应?

arrays - 提取数组中非 NaN 元素的索引和值的正确方法

c++ - 使用 mex 编译库时出错 - __int 64 未命名类型

linux - 为什么系统时间0在这里?

r - 如何找到两个时间向量的不同元素?