我编写了一个脚本,将一组BMP转换为avi。直到最近它工作正常。现在我得到了这个奇怪的错误“无法写入流数据”。将5个bmps库转换为avi后得到它。它运行在BMP的库管理器上,并将每个库转换为avi。每次它在第6部电影中叠加..第6个库中没有腐败文件。知道为什么吗?
这是代码:
%this works
clc
%path='C:/Documents and Settings/Ariel/Desktop/exp_brk_scrm/2.1/group1/exp_up/exp_up/4python/stims';
%FullPath=strcat(path,'/mov1.avi');
path4avi='G:/experiments/cfs3/building/Copy of StimBMP/avi/'; %dont forget the in the end of the path
pathOfFrames='G:/experiments/cfs3/building/Copy of StimBMP/stims/'; %here too
NumberOfFiles=70; %to be generated
NumberOfFrames=8; %in each avi file
for i=1:1:(NumberOfFiles)
FileName=strcat(path4avi,'Stim',int2str(i),'.avi') %the generated files
aviobj = avifile(FileName,'compression','None'); %due to changes in the new Media Players
aviobj.fps=10;%10 frames in Sec
for j=1:1:(NumberOfFrames)
Frame=strcat(pathOfFrames,'stim',int2str(i),'/stim',int2str(j),'.BMP') % the BMP's (not a good name for thedirectory)
%[Fa,map]=imread(Frame);
%imshow(Fa,map); %
[Fa,map]=imread(Frame);
imshow(Fa,map);
% imshow(Fa);
F=getframe();
aviobj=addframe(aviobj,F)
end
aviobj=close(aviobj);
end
答案 0 :(得分:1)
由于我不确定你问题的根源是什么,我只是提供一个如何创建AVI电影的简单工作示例。使用图像处理工具箱中的演示图像:
figure('Color','white')
aviObj = avifile('out.avi', 'fps',5); %# create AVI object
for i=1:10
I = imread( sprintf('AT3_1m4_%02d.tif',i) ); %# read image frame
imshow(I, 'Border','tight'), colormap gray %# show image
aviObj = addframe(aviObj, getframe(gcf)); %# grab frame and add to AVI
end
close(gcf)
aviObj = close(aviObj); %# close and write movie
winopen('out.avi') %# play movie in Windows
答案 1 :(得分:1)
嗨,我知道这可能看起来有点过于简化,但我遇到了同样的问题。 我的代码工作正常,只有一天完全按照你的描述停止。我发现它只是我写文件的目的地,因为视频文件没有足够的内存。删除了一些我不需要的垃圾,它立即起作用。 Matlab只是没有意识到问题在于存储空间所以在我的情况下它说自己的'movie2avi'函数存在问题
答案 2 :(得分:0)
图书馆的顺序是否重要?换句话说,如果你先运行第6个和第1个,它会在第一个还是最后一个崩溃?
如果它在第一个崩溃,那么你的库#6有问题
如果它在最后一次崩溃,你可能会填补内存。在运行脚本之前使用clear classes
,这应该可以消除Matlab在内存中填充的内容。或者,如果泄漏或碎片非常糟糕,您可以尝试在三个库之后重新启动Matlab。