您的位置:首页 > 编程语言 > MATLAB

使用Matlab将一组jpeg图像合成为avi视频

2013-11-15 19:14 531 查看
昨天突发奇想,想利用实验室的海康高清监控摄像头拍个“延时摄影”。

于是制定如下方案,将镜头对着实验室窗外,配置IPC每分钟截一张1920x1080的jpeg图片,上传到实验室的FTP,拍摄一天,这样算来可以得到60x24=1440张图片,然后以25fps播放,这样,时长就是57.6秒,不到1分钟记录下窗外的一天。

说干就干,昨天下午架起IPC,测试白天一张jpeg图片大概180KB,一天估计250MB。

不过后来忘关红外了,导致从傍晚到清晨的截图上都是红外灯在玻璃上的反光。。。

到今天中午的时候把图片从ftp取下来,总共拍了20个小时,1244张图片,不到150MB,然后就开始考虑怎么把这些图片转成视频了。

对比了一下,感觉用Matlab最方便,使用videowriter类,先读取jpeg图像数据,然后一帧一帧地写入avi视频文件。

% http://www.mathworks.cn/cn/help/matlab/ref/videowriterclass.html % Author:chenxupro@gmail.com

JpegFilesDirPath = 'D:\JpegFilesDir\';
ImgList = dir([JpegFilesDirPath '*.jpg']);
AviFilePath= 'D:\Movie.avi';

AviFileObj = VideoWriter(AviFilePath);
AviFileObj.FrameRate = 25;
% AviFileObj.Quality = 100;

% Open file
open(AviFileObj);

ConvertFrameNum = length(ImgList);

tic;
for k = 1 : ConvertFrameNum
JpegImg = imread([JpegFilesDirPath ImgList(k).name]);
Mov = im2frame(JpegImg);
if rem(k, 25) == 0
disp([num2str(k) ' frames processed...'])
end
writeVideo(AviFileObj, Mov);
end;
toc;

% Close file
close(AviFileObj);


Matlab版本:Version 7.11.0.584 (R2010b) 32-bit (win32) August 16, 2010

运行时间:Elapsed time is 204.364983 seconds

合成后的avi文件为145MB,使用vlc播放正常,编码信息如下:



后来在上传到youku之前使用vlc将avi转码成了mp4(h.264),大小约14MB。

播放效果在这里:http://v.youku.com/v_show/id_XNjM1MDk3MzAw.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: