本文部分参考https://blog.youkuaiyun.com/qq_23097931/article/details/51108747
VideoReader能用来读取视频,然后用imwrite将视频保存。
VideoReader介绍
首先对于一个视频来说我们要写入它的位置
obj = VideoReader('D://Media//111.mp4');%输入视频位置
难点在于详解obj结构体的含义,如下(见doc VideoReader):
Name - -视频文件名
Path – 视频文件路径
Duration – 视频的总时长(秒)
FrameRate - -视频帧速(帧/秒)
NumberOfFrames – 视频的总帧数
Height – 视频帧的高度
Width – 视频帧的宽度
BitsPerPixel – 视频帧每个像素的数据长度(比特)
VideoFormat – 视频的类型, 如 ‘RGB24’.
Tag – 视频对象的标识符,默认为空字符串”
Type – 视频对象的类名,默认为’VideoReader’.
UserData – Generic field for data of any class that you want to add to the object. Default: []
obj_numberofframe = obj.NumberOfFrame;%读取总的帧数
obj_height = obj.Height;%读取视频帧高度
read 读取视频帧
frame = read(obj),获取该视频对象的所有帧
frame = read(obj,index),获取该视频对象的制定帧
frame = read(obj, 1); % first frame only 获取第一帧
frame = read(obj, [1 10]); % first 10 frames 获取前10帧
frame = read(obj, Inf); % last frame only 获取最后一帧
frame = read(obj, [50 Inf]); % frame 50 thru end 获取第50帧之后
imwrite介绍
imwrite(frame,strcat('C:\image\car\1.jpg'),'jpg');% 保存帧
%%%frame为待保存的某一帧
%%%strcat(c:\image\car\1.jpg')为保存目录
%%%'jpg'为保存格式
输出图片序列
namestyle=sprintf('%06d',i);
其中0表示其他位置的填充,6表示一共6位,d表示十进制
比如说是000001 以此类推。
strcat:Strings Catenate
即横向连接字符串,如果是第一个是地址,那么就写入该地址
最终结果
obj = VideoReader('C://Users//Administrator//Documents//...//1.mp4');%输入视频位置
numFrames = obj.NumberOfFrames;% 帧的总数
for k = 1 : numFrames% 读取前所有帧
frame = read(obj,k);%读取第几帧
imshow(frame);%显示帧(可以不用这个)
namestyle=sprintf('%03d',k);
imwrite(frame,strcat('C:\Users\Administrator\Documents\...\',namestyle,'.jpg'),'jpg');% 保存帧
end
`
需要注意在imwrite最后面这里是有一个斜杠的,这样才能写入到指定的文件夹。此外看一下是双杠,单杠,反斜杠。