Downsample and Upsample videos in matlab

I am working with videos in matlab and the code is taking so much time to give me results, that's why i thought downsampling and upsmaling the video could be the best solution, can anyone help me with that.

1 件のコメント

Star Strider
Star Strider 2022 年 7 月 16 日
What do you intend by ‘upsampling’ and ‘downsampling’?

サインインしてコメントする。

回答 (2 件)

KSSV
KSSV 2022 年 7 月 16 日

0 投票

Read video frame by frame, and use imresize on each frame.

10 件のコメント

Ala baccar
Ala baccar 2022 年 7 月 16 日
Thanks for the answer but even with resizing the frame to this scale the process still takes so long.
imresize(im, [300 300])
KSSV
KSSV 2022 年 7 月 16 日
What do you mean by so long quantitatively?
Ala baccar
Ala baccar 2022 年 7 月 16 日
I mean when i tried to run my code on a one minute video it took almost a half an hour to give the result, which is too long.
KSSV
KSSV 2022 年 7 月 16 日
Show us your code....
Ala baccar
Ala baccar 2022 年 7 月 16 日
編集済み: Ala baccar 2022 年 7 月 16 日
v1 = VideoReader('C:\Users\alaba\Desktop\skeleton\compressed.mp4');
set(gca,'xtick',[],'ytick',[])
set(gca,'LooseInset',get(gca,'TightInset'))
i1 = 0;
i2 = 0;
i3 = 0;
i4 = 0;
%matlab.video.read.UseHardwareAcceleration('on');
while i1 < v1.NumberOfFrames && i2 < v1.NumberOfFrames && i3< v1.NumberOfFrames && i4 < v1.NumberOfFrames
if i1 < v1.NumberOfFrames
i1 = i1+1;
im = v1.read(i1);
im = imresize(im, [300 300]);
im = imrotate(im,90);
iim1 = image(im,'XData',[0 0],'YData',[height1/2 - 300/2 height1/2 - 300/2]);
end
if i2 < v1.NumberOfFrames
i2 = i2+1;
im = v2.read(i2);
im = imresize(im, [300 300]);
iim2 = image(im,'XData',[width1/2-300/2 width1/2-300/2],'YData',[0 0]);
end
if i3 < v1.NumberOfFrames
i3 = i3+1;
im = v3.read(i1);
im = imresize(im, [300 300]);
im = imrotate(im,-90);
iim3 = image(im,'XData',[width1-300 width1-300],'YData',[height1/2 - 300/2 height1/2 - 300/2]);
end
if i4 < v1.NumberOfFrames
i4 = i4+1;
im = v4.read(i4);
im = imresize(im, [300 300]);
im = imrotate(im,180);
iim4 = image(im,'XData',[width1/2-300/2 width1/2-300/2],'YData',[height1 - 300 height1 - 300]);
end
%frame=im2frame(gcf);
frame=getframe(gcf);
writeVideo(writerObj,frame);
drawnow
end
close(writerObj)
Well this is the useful part
Image Analyst
Image Analyst 2022 年 7 月 16 日
What are i1, i2, i3, and i4 for? Why are you doing something 4 times? Is there any difference?
And did you even try my code that I uploaded below for you? It uses imresize just like @KSSV but it's a full demo - you just have to change the name of the video and the desired output size of the frames. If you want me to just butt out, that's fine too.
Ala baccar
Ala baccar 2022 年 7 月 16 日
Of course sir i tried your code but i am still stack with this error saying Error using movie_resize (line 44)
Cannot create file C:\Program Files\Polyspace\R2021a\bin\win64\NewRhinos.avi. Permission Denied. That's why i haven't given you my feedback yet
And for the code i am trying to generate a video from an original video given as input which have the following from
Image Analyst
Image Analyst 2022 年 7 月 16 日
Windows does not let you create any files under "C:\Program Files". Choose another location.
Ala baccar
Ala baccar 2022 年 7 月 16 日
Even when i changed the path out from "C:\Program Files" it gave me this eror Unable to find file. Ensure file exists and path is valid.
% Create a VideoWriter object to write the video out to a new, different file.
outputFullFileName = fullfile(pwd, 'C:\resize\NewRhinos.avi');
outputVideoWriterObject = VideoWriter(outputFullFileName);
Image Analyst
Image Analyst 2022 年 7 月 18 日
When using VideoWriter, it creates a new file. So all you need to do is to make sure the folder exists:
You can't append c:\resize onto your current folder because then you'd have two drive letters and two colons in the filename. Just leave off the colon off
outputFullFileName = fullfile(pwd, 'C:\resize\NewRhinos.avi')
to see.
>> fullfile(pwd, 'C:\resize\NewRhinos.avi')
ans =
'C:\Users\alabaccar\Documents\MATLAB\work\Tests\C:\resize\NewRhinos.avi'
See - that's not a proper filename.
So do this:
% Create a VideoWriter object to write the video out to a new, different file.
outputFolder = 'C:\resize';
outputFullFileName = fullfile(outputFolder, 'NewRhinos.avi');
fprintf('Creating new output file : "%s".\n', outputFullFileName)
outputVideoWriterObject = VideoWriter(outputFullFileName);

サインインしてコメントする。

Image Analyst
Image Analyst 2022 年 7 月 16 日

0 投票

I already have a demo for resizing a video. See attached.

1 件のコメント

Image Analyst
Image Analyst 2022 年 7 月 16 日
If you say that it takes too long, how long does it take and what is the maximum time you will allow? Perhaps you can use parfor and the Parallel Processing Toolbox, and a faster computer, to speed it up.

サインインしてコメントする。

質問済み:

2022 年 7 月 16 日

コメント済み:

2022 年 7 月 18 日

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by