Не удалось записать данные потока, matlab - PullRequest
0 голосов
/ 12 августа 2010

Я написал скрипт, который конвертирует набор 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     

Ответы [ 3 ]

1 голос
/ 01 марта 2013

Привет, я знаю, это может показаться немного упрощенным, но у меня была та же проблема. Мой код работал нормально и только один день остановился именно так, как вы описали. Я обнаружил, что это был просто пункт назначения, в который я записывал свои файлы, просто не хватало памяти для видеофайлов. Удалил мусор, который мне не нужен, и он заработал мгновенно. Matlab просто не понимает, что проблема связана с местом для хранения, поэтому в моем случае он сказал, что была проблема с его собственной функцией 'movie2avi'

1 голос
/ 13 августа 2010

Поскольку я не уверен, что является источником вашей проблемы, я просто предоставляю простой рабочий пример того, как создать фильм 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

out.avi

0 голосов
/ 13 августа 2010

Имеет ли значение порядок библиотек?Другими словами, если вы запустите 6-й первый и 1-й последний, произойдет ли сбой первого или последнего?

Если произойдет сбой первого, то у вашей библиотеки # 6 возникнет проблема.на последнем вы, возможно, заполняете память где-то.Используйте clear classes перед запуском скрипта, что должно устранить все, что Matlab заполняет в памяти.Или, если утечка или фрагментация действительно плохие, вы можете попробовать перезапустить Matlab после трех библиотек.

...