为何用matlab将视频每帧提取出来,再合成,新的视频文件会变大?如何使视频文件大小不变?并且文件格式从mp4变为avi,尽管输出视频的代码写为VideoWriter('视频',MPEG-4'),文件依旧变大并且打不开。
obj = VideoReader('text.mp4');%输入视频位置
rateFrames = obj.FrameRate;
numFrames = obj.NumberOfFrames;% 帧的总数
for o=1:numFrames
frame = read(obj,o);
imwrite(frame,strcat('tqz',num2str(o),'.jpg'),'jpg');% 保存帧
end
writerObj=VideoWriter('text_1');
open(writerObj);
for s=1:numFrames
frame=imread(strcat('tqz',num2str(s),'.jpg'),'jpg');
writeVideo(writerObj,frame);
end
close(writerObj);
writerObj.FrameRate=rateFrames;
运行出来的文件格式是.avi,经过视频转换器将格式转为mp4,文件还是变大了。
如何使输出的视频文件大小不变。
因为你所使用的MPEG-4
编码器本身就是大视频格式,另外,VideoWriter创建的视频的压缩率与原始视频的压缩率不同,一般是通过更改FourCC来选择不同的方法,但是opencv默认提供的几种都是常规编码,如果要与原来的一样,需要使用底层的ffmpeg调试,上层opencv没法对这种细小的参数进行调整。而你这里的MATLAB,还相当于opencv的上层,所以,只能说尽量减小空间,具体的一些解码器可以看我之前博客: