在MATLAB中制作电影需要太多的RAM和硬盘空间。。。我应该用什么电影编剧?
我面临着使用imagesc制作约10000帧和每帧约10000像素的电影。然而,尽管我的计算机配备了8GB的RAM,运行32位MATLAB,但MATLAB在大约1000帧时内存不足。另外,我想我的电影压缩以及。制作大型电影的最佳选择是什么?为了找出最佳选择,我测试了Windows 7 MATLAB 2012a 32位的几个电影编写功能 太久没看书了 关键是要确保该功能在电影完成之前将帧刷新到磁盘。VideoWriter与MPEG-4相结合,可产生恒定的小内存大小和压缩视频 代码 结果 内存与帧编号 正如我们所看到的,VideoWriter、IMWrite和Movie2AVI对内存的需求几乎是恒定的,而AVI2File和MPGWrite所需的内存随着帧数的增加而增加。这是有道理的,因为后者需要在写入电影之前保持每一帧,而前者似乎定期刷新到磁盘 电影大小 VideoWriter-AVI:154529KB VideoWriter-MPEG-4:19355KB IMWrite:13385KB 电影2AVI-AVI:992276 KB MPGWrite:24301KB在MATLAB中制作电影需要太多的RAM和硬盘空间。。。我应该用什么电影编剧?,matlab,memory,movie,memory-efficient,Matlab,Memory,Movie,Memory Efficient,我面临着使用imagesc制作约10000帧和每帧约10000像素的电影。然而,尽管我的计算机配备了8GB的RAM,运行32位MATLAB,但MATLAB在大约1000帧时内存不足。另外,我想我的电影压缩以及。制作大型电影的最佳选择是什么?为了找出最佳选择,我测试了Windows 7 MATLAB 2012a 32位的几个电影编写功能 太久没看书了 关键是要确保该功能在电影完成之前将帧刷新到磁盘。VideoWriter与MPEG-4相结合,可产生恒定的小内存大小和压缩视频 代码 结果 内存与帧编
正如预期的那样,MPEG-4产生了比AVI更高效的压缩。有趣的是,VideoWriter和IMWrite在这项测试中都优于MPGWrite,尽管我认为MPGWrite比VideoWriter早很多年 为了找出您的最佳选择,我测试了Windows 7 MATLAB 2012a 32位的几个电影编写功能 太久没看书了 关键是要确保该功能在电影完成之前将帧刷新到磁盘。VideoWriter与MPEG-4相结合,可产生恒定的小内存大小和压缩视频 代码 结果 内存与帧编号 正如我们所看到的,VideoWriter、IMWrite和Movie2AVI对内存的需求几乎是恒定的,而AVI2File和MPGWrite所需的内存随着帧数的增加而增加。这是有道理的,因为后者需要在写入电影之前保持每一帧,而前者似乎定期刷新到磁盘 电影大小 VideoWriter-AVI:154529KB VideoWriter-MPEG-4:19355KB IMWrite:13385KB 电影2AVI-AVI:992276 KB MPGWrite:24301KB
正如预期的那样,MPEG-4产生了比AVI更高效的压缩。有趣的是,VideoWriter和IMWrite在这项测试中都优于MPGWrite,尽管我认为MPGWrite比VideoWriter早很多年 根据我的经验,从MATLAB绘图制作视频的最强大、一致和灵活的方法是将单个帧导出为图像,然后将图像与另一个程序(如ffmpeg)组合成电影。这也使您有机会在需要时批量处理图像。我创建了一个完整的过程,您可以在这里找到:根据我的经验,从MATLAB绘图制作视频最强大、一致和灵活的方法是将单个帧导出为图像,然后将图像与另一个程序(如ffmpeg)结合成电影。这也使您有机会在需要时批量处理图像。我创建了一个完整的过程,你可以在这里找到:这可能有助于提到这是哪个版本的Matlab。自从引入以来,VideoWriter课程发生了一些变化。另外,您使用了什么操作系统?VideoWriter使用的视频编解码器严重依赖操作系统。啊。。。我看到您的代码使用内存,这是一个仅限Windows的函数。不幸的是,您的解决方案不是跨平台的。不幸的是,您的解决方案没有文档记录。如果你能建议一个有文档记录的/跨平台的内存替代方案,我洗耳恭听。另外,写下MATLAB的版本。提到这是哪个版本的MATLAB可能会有帮助。自从引入以来,VideoWriter课程发生了一些变化。另外,您使用了什么操作系统?VideoWriter使用的视频编解码器严重依赖操作系统。啊。。。我看到您的代码使用内存,这是一个仅限Windows的函数。不幸的是,您的解决方案不是跨平台的。不幸的是,您的解决方案没有文档记录。如果你能建议一个有文档记录的/跨平台的内存替代方案,我洗耳恭听。另外,写下MATLAB的版本。有趣的替代品。。。如果有人可以建议Windows或其他版本的convert命令行版本,我可以尝试这种方法。@Petard ImageMagick提供convert和许多其他实用程序,可用于Windows、OSX和Linux。有趣的选择。。。如果有人可以建议Windows或其他版本的convert命令行版本,我可以尝试这种方法。@Petard ImageMagick提供convert和许多其他实用程序,可用于Windows、OSX和Linux。
%%%
% General Setup
%%%
number_of_frames = 1000;
Z = peaks;
%%%
% Video Writer -- AVI
%%%
%%
f = figure('renderer', 'zbuffer');
a = axes('parent', f);
axis(a, 'tight');
surf(a, Z);
current_zlim = zlim();
set(a, 'nextplot', 'replacechildren', 'zlimmode', 'manual', 'zlim', current_zlim);
vid = VideoWriter('myPeaks - VideoWriter.avi');
vid.Quality = 100;
vid.FrameRate = 15;
open(vid);
current_memory_used_Bytes(1, number_of_frames + 1) = 0;
current_memory_struct = memory();
current_memory_used_Bytes(1) = current_memory_struct.MemUsedMATLAB;
for(k = 1 : number_of_frames)
surf(a, sin(2*pi*k/20)*Z, Z);
writeVideo(vid, getframe(f));
current_memory_struct = memory();
current_memory_used_Bytes(k + 1) = current_memory_struct.MemUsedMATLAB;
end
close(vid);
figure;
plot((current_memory_used_Bytes(2 : end) - current_memory_used_Bytes(1)) / 1e6);
xlabel('Frame Number');
ylabel('Movie Memory in RAM (MB)');
title('VideoWriter -- AVI');
saveas(gcf, 'myPeaks - VideoWriter -- AVI.png');
close all;
clearvars -except number_of_frames Z
%%%
% Video Writer -- MPEG-4
%%%
%%
f = figure('renderer', 'zbuffer');
a = axes('parent', f);
axis(a, 'tight');
surf(a, Z);
current_zlim = zlim();
set(a, 'nextplot', 'replacechildren', 'zlimmode', 'manual', 'zlim', current_zlim);
vid = VideoWriter('myPeaks - VideoWriter.mp4', 'MPEG-4');
vid.Quality = 100;
vid.FrameRate = 15;
open(vid);
current_memory_used_Bytes(1, number_of_frames + 1) = 0;
current_memory_struct = memory();
current_memory_used_Bytes(1) = current_memory_struct.MemUsedMATLAB;
for(k = 1 : number_of_frames)
surf(a, sin(2*pi*k/20)*Z, Z);
writeVideo(vid, getframe(f));
current_memory_struct = memory();
current_memory_used_Bytes(k + 1) = current_memory_struct.MemUsedMATLAB;
end
close(vid);
figure;
plot((current_memory_used_Bytes(2 : end) - current_memory_used_Bytes(1)) / 1e6);
xlabel('Frame Number');
ylabel('Movie Memory in RAM (MB)');
title('VideoWriter -- MPEG-4');
saveas(gcf, 'myPeaks - VideoWriter -- MPEG-4.png');
close all;
clearvars -except number_of_frames Z
%%%
% Movie2AVI
%%%
%%
f = figure('renderer', 'zbuffer');
a = axes('parent', f);
axis(a, 'tight');
surf(a, Z);
current_zlim = zlim();
set(a, 'nextplot', 'replacechildren', 'zlimmode', 'manual', 'zlim', current_zlim);
movie_frames(1 : number_of_frames) = struct('cdata', [], 'colormap', []);
current_memory_used_Bytes(1, number_of_frames + 1) = 0;
current_memory_struct = memory();
current_memory_used_Bytes(1) = current_memory_struct.MemUsedMATLAB;
for(k = 1 : number_of_frames)
surf(a, sin(2*pi*k/20)*Z, Z);
movie_frames(k) = getframe(f);
current_memory_struct = memory();
current_memory_used_Bytes(k + 1) = current_memory_struct.MemUsedMATLAB;
end
movie2avi(movie_frames, 'myPeaks - Movie2AVI.avi', 'compression', 'none', 'fps', 10);
figure;
plot((current_memory_used_Bytes(2 : end) - current_memory_used_Bytes(1)) / 1e6);
xlabel('Frame Number');
ylabel('Movie Memory in RAM (MB)');
title('Movie2AVI -- AVI');
saveas(gcf, 'myPeaks - Movie2AVI -- AVI.png');
close all;
clearvars -except number_of_frames Z
%%%
% IMWrite
%%%
%%
f = figure('renderer', 'zbuffer');
a = axes('parent', f);
axis(a, 'tight');
surf(a, Z);
current_zlim = zlim();
set(a, 'nextplot', 'replacechildren', 'zlimmode', 'manual', 'zlim', current_zlim);
current_frame = getframe(a);
[frame_indices, cmap] = rgb2ind(current_frame.cdata, 256, 'nodither');
movie_frames = repmat(frame_indices, [1 1 1 number_of_frames]);
current_memory_used_Bytes(1, number_of_frames + 1) = 0;
current_memory_struct = memory();
current_memory_used_Bytes(1) = current_memory_struct.MemUsedMATLAB;
for(k = 1 : number_of_frames)
surf(sin(2*pi*k/20)*Z, Z)
f = getframe(a);
movie_frames(:, :, 1, k) = rgb2ind(f.cdata, cmap, 'nodither');
current_memory_struct = memory();
current_memory_used_Bytes(k + 1) = current_memory_struct.MemUsedMATLAB;
end
imwrite(movie_frames, cmap, 'myPeaks - IMWrite.gif', 'DelayTime', 0, 'LoopCount', inf);
figure;
plot((current_memory_used_Bytes(2 : end) - current_memory_used_Bytes(1)) / 1e6);
xlabel('Frame Number');
ylabel('Movie Memory in RAM (MB)');
title('Movie2AVI -- AVI');
saveas(gcf, 'myPeaks - IMWrite.png');
close all;
clearvars -except number_of_frames Z
%%%
% MPGWrite
%%%
%%
f = figure('renderer', 'zbuffer');
a = axes('parent', f);
axis(a, 'tight');
surf(a, Z);
current_zlim = zlim();
set(a, 'nextplot', 'replacechildren', 'zlimmode', 'manual', 'zlim', current_zlim);
winsize = get(f, 'Position');
winsize(1:2) = [0 0];
movie_frames = moviein(number_of_frames, f, winsize);
current_memory_used_Bytes(1, number_of_frames + 1) = 0;
current_memory_struct = memory();
current_memory_used_Bytes(1) = current_memory_struct.MemUsedMATLAB;
for(k = 1 : number_of_frames)
surf(sin(2*pi*k/20)*Z, Z)
drawnow;
movie_frames(:, k) = im2frame(hardcopy(f, '-Dzbuffer', '-r0'));
current_memory_struct = memory();
current_memory_used_Bytes(k + 1) = current_memory_struct.MemUsedMATLAB;
end
mpgwrite(movie_frames, jet, 'myPeaks - MPGWrite.mpg');
figure;
plot((current_memory_used_Bytes(2 : end) - current_memory_used_Bytes(1)) / 1e6);
xlabel('Frame Number');
ylabel('Movie Memory in RAM (MB)');
title('MPGWrite -- MPG');
saveas(gcf, 'myPeaks - MPGWrite.png');
close all;
clearvars -except number_of_frames Z