Если вы хотите сделать все сразу, не делая это в цикле ...
%read the entire video
obj=VideoReader('2.avi');
mov=read(obj);
size(mov) %mov is in 4D matrix: [Height (Y), Width (X), RGB (color), frame]
%determine the height of the video
vidHeight = obj.Height;
%only use the top half of the image:
mov_cropped=mov(1:vidHeight/2,:,:,:);
aviObj = VideoWriter('cropped_video.avi','Uncompressed AVI');
%save the cropped video
open(aviObj);
writeVideo(aviObj,mov_cropped);
close(aviObj);
Обратите внимание, что для больших файлов avi существует проблема, которая при попытке прочитать все сразу может привести к нехватке памяти. В этом случае лучше читать в файле кадр за кадром и записывать файл кадр за кадром.
for k=1:obj.NumberOfFrames
mov(k).cdata = read(xyloObj, k);
end
И сохранить данные после того, как вы их преобразовали (обратите внимание, что порядок в матрице изменится)
vidObj = VideoWriter('cropped_video.avi');
open(vidObj);
for k=1:obj.NumberOfFrames
imshow(mov(k));
writeVideo(vidObj,currFrame);
end
close(vidObj);