相信大家平时制作PPT时,通常会需要一些GIF加以修饰或者辅助说明。但是又苦于不会用视频剪辑软件或者制作的质量不够完美。今天,给大家分享一个如何用MATLAB来制作GIF动画,不仅简单实用体积小,GIF动画的效果还很精致。其中涉及到了很多MATLAB编程的一些基础知识,比如for语句、while循环以及涉及到图像处理的函数语法,我都作了详细的注释。相信在给大家带来干货分享的同时,也会加深大家对编程基础知识的理解和对编程的认识。
这步操作,主要是将视频所有帧的图像读取出来,并且按照序号进行保存 (如果视频比较大的话,大家可以根据实际情况,对for循环进行修改读取和保存相应的部分),方便大家根据图片的序号查找视频中想要节选的片段。
// An highlighted block video = VideoReader('video_eg.mp4'); %读取视频 nFrames = video.NumberOfFrames; %获取视频帧数 % H = video.Height; %得到高度 % W = video.Width; %得到宽度 %read one frame every time for i = 1:nFrames mov = read(video,i); %读取视频的每一帧 name = strcat('mov_',int2str(i),'.jpg'); %给每一帧命名 imwrite(mov,name); %保存每一帧图像 pause(0.0001) %暂停 end为了更精准地满足对GIF制作的需求,视频的整个界面中有可能有很多多余的部分,这是我们需要对视频屏幕区进行选取,用鼠标画出矩阵区域裁剪我们想要的部分。
%% ==== 选取鼠标手动裁剪选定的gif区域 start = 130; %设置初始帧 stepall = 203; %设置终止帧 step1 = 1; %GIF动画帧间隔 name = strcat('mov_',int2str(start),'.jpg'); %帧名 gif_img = imread(name); [b,r] = imcrop(gif_img); %裁剪函数裁剪图像这是我从抖音上随便下载了一个小视频作为素材,想要将两个小孩子拥抱的镜头加个特写制作出一个GIF动画。如图所选区域就是两个小孩即将拥抱的镜头所在区域。鼠标选中之后,双击。
接下来便对上一步中,所选择的帧图像序号,进行合成制作GIF动画了。这里我选择的起始和终止序号分别是130,203,大家根据自己实际情况做修改即可。
// i = start; while(i <= stepall) name = strcat('mov_',int2str(i),'.jpg'); b = imread(name); gif_img = imresize(b,1); %把图像放大*倍 gif_img=imcrop(gif_img,r);%交互式裁剪 [I,map] = rgb2ind(gif_img,128); %索引图像 if i == start imwrite(I,map,'New.gif','gif', 'Loopcount',inf,'DelayTime',0.000001); elseif i == stepall imwrite(I,map,'New.gif','gif','WriteMode','append','DelayTime',0.000001); else imwrite(I,map,'New.gif','gif','WriteMode','append','DelayTime',0.000001); end i= i+step1; end效果图如下:
扫描下方二维码关注我的微信公众号:阿不小奇谈 想要获取本视频素材以及源码,在公众号后台发送:GIF 或者直接加我的个人微信:Abox_0226
