昨天突发奇想,想利用实验室的海康高清监控摄像头拍个“延时摄影”。
于是制定如下方案,将镜头对着实验室窗外,配置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。