在《MATLAB | 生成多张图片并保存》一文中演示了如何生成多张图片并保存到指定文件夹中,这篇博客将在上文基础上演示如何生成一个视频文件。
%% Title: Video Generator
% Author: 羽墨志(https://yumozhi.com/)
% Date : 2020-09-17
%% Introduction
% 按需求生成视频文件并保存到指定文件夹下
width = 480; % 图片宽度
height = 600; % 图片高度
dim = 3; % 图片维度
% 按照图片规格预分配内存
image = zeros(height, width, dim, 'uint8'); % 指定类型,避免数据转换
path = 'image/'; % 保存的文件夹位置
prefix = 'image_'; % 文件名前缀
format = 'png'; % (图片)文件格式
suffix = strcat('.',format); % 文件后缀
gray_level = 32; % 灰阶等级
gray_step = 256 / gray_level; % 灰阶间隔
% 如果目录不存在则新建,否则删除文件夹并新建
if ~exist(path,'dir')
mkdir(path);
else
rmdir(path,'s');
mkdir(path);
end
% 设置视频相关参数
% 视频分辨率由第一帧图片的分辨率确定
video_path = 'videos/'; % 保存的路径,需手动提前创建
video_name = 'video.avi'; % 视频文件名
frame_rate = 1; % 视频帧率
% vedio = VideoWriter('demo.mp4','MPEG-4'); % 初始化一个MP4文件
% vedio = VideoWriter('demo_tag.avi','Uncompressed AVI'); % 初始化一个不压缩的avi文件
vedio = VideoWriter(strcat(video_path,video_name)); % 初始化一个avi文件
vedio.FrameRate = frame_rate; % 设置视频帧率
open(vedio); % 打开视频文件
% 生成图像并保存
for index = 1 : gray_level
% 计算对应灰阶值
gray_value = index * gray_step - 1;
image(:,:,:) = gray_value;
% 拼接文件名并保存图像
% 生成视频仅需图像数据即可,因此无需保存图片
% imwrite(image,strcat(path, prefix, num2str(gray_value), suffix), format);
writeVideo(vedio,image); % 写入视频帧
end
close(vedio); % 关闭视频文件