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

昨天突发奇想,想利用实验室的海康高清监控摄像头拍个“延时摄影”。

于是制定如下方案,将镜头对着实验室窗外,配置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

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值