纪录片或者是风光宣传中常见的摄影方式,每隔一段时间对同一场景进行拍摄并将获得的图片制成视频达到一种“快速播放”的效果。如果调慢帧速率也可以起到播放ppt的效果。
综合参考网上的代码做了一些简单的改动,使代码用起来更加方便可控。输出文件为avi格式。
function VideofromPics(dn,PicFormat,aviname,fv,Qual)
%dn 路径名;picformat 图片格式; aviname 输出文件名(不要加格式); fv 帧速率/秒;Qual: 图像质量(%)
%eg1.VideofromPics('E:\照片\湖南try\','jpg','South to the Lake',10,100);
%存储于默认路径
%eg2.VideofromPics('E:\照片\湖南try\','jpg','C:\Users\12524\Desktop\South to the Lake',5,70);
%存储于指定路径
if ~exist(dn, 'dir')
error('dir not exist!!!!');
end
PicName=fullfile(dn, strcat('*.',PicFormat));
PicName=dir(PicName);
AviFileObj = VideoWriter(aviname);
AviFileObj.FrameRate = fv;%帧速率/秒
AviFileObj.Quality =Qual;%图像质量
open(AviFileObj);
ConvertFrameNum = length(PicName);
times=0;
tic;
for k = 1 : ConvertFrameNum
Img = imread([dn PicName(k).name]);
Mov = im2frame(Img);
if ~isempty( AviFileObj.Height)
if size(Img,1) ~= AviFileObj.Height || size(Img,2) ~= AviFileObj.Width
close(AviFileObj);
delete(aviname);
error('所有图片的尺寸要相同!!');
end
end
writeVideo(AviFileObj, Mov);
end
toc;
% Close file
close(AviFileObj);
times=round(ConvertFrameNum/fv);
disp([' 视频时长' num2str(times) '秒' ]);%显示视频时长
BS=dir([aviname '.avi']);
MBS=BS.bytes/(1024^2);
disp([' 视频大小' num2str(MBS) 'Mb' ]);%显示视频大小
end