要创建可变帧率电影,您可以使用我的QTWriter类。它是一个易于使用的类文件,受 Matlab 的VideoWriter类的启发,允许以适合 Matlab 样式图形的多种格式本地导出 QuickTime 编码的电影。不需要其他任何东西,甚至不需要 QuickTime(除非您想播放输出文件)。值得注意的是,它支持 Quicktime 连续改变帧速率的能力。
下面是一些示例代码,可生成类似于此 QuickTime 电影的电影:
% 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 中,可变帧率 QuickTime 电影可以通过传递给函数来使用 Matlab 的VideoReader
类(我在 Windows/Linux 上不确定)播放。如果您将输出电影转换为另一种容器格式(例如,AVI)或不支持可变帧率的编解码器(或者如果您的转换软件不支持),那么您需要将转换后电影的帧率设置为最高QuickTime 文件中的帧率。这很可能会导致更大的文件 - 人们可以将可变帧率电影视为时间压缩(有点像帧间压缩)。readerobj.FrameRate
movie
帧率参数没有无限的分辨率和范围,因此可能还需要调整'TimeScale'
参数。根据用户硬件、解码的计算成本和数据速率,任何电影都可能难以以高帧率播放。通常,玩家只是丢帧。QTWriter
还有一个'PlayAllFrames'
选项可以强制 QuickTime Player 渲染每一帧——但这可能会导致非实时播放。或者,可以选择“Photo TIFF”压缩类型,它以稍大的文件大小为代价更快地解码。
代码是开源的 (BSD),托管在Github上,我欢迎贡献者。还有很大的优化和改进空间。您可以在项目网页上看到另一个示例和生成的电影。