%存第k幀
clc;
clear;
video_file='D:\pictures\5.mp4';%讀取視頻位置
obj=VideoReader(video_file);
frame_num=obj.NumberOfFrames;%一共有多少幀
frame = read(obj,Inf);%獲取最後一幀(frame = read(obj,k);%讀取第k幀)
imwrite(frame,strcat('D:\pictures\last.jpg'),'jpg');% 只保存最後一幀,並命名
運行後D盤相應文件夾即出現相應圖片:
ps:
1.下述方法一和方法二隻是命名語句不同```
2.下述代碼其實可以保存所有幀,只是幀數太多,以保存前15幀爲例。
%存前15幀 ,方法一
clc;
clear;
%讀取視頻
video_file='D:\pictures\5.mp4';
obj=VideoReader(video_file);
frame_num=obj.NumberOfFrames;%一共有多少幀
% 分離圖片
for i=1:15%讀取前15幀
img=strcat('D:\pictures\',num2str(i));
img=strcat(img,'.jpg');
I=read(obj,i);%讀出第15幀圖片
imwrite(I,strcat('D:\pictures\',num2str(i),'.jpg'),'jpg');% 保存幀
end
%存前15幀,方法二
%% 將視頻逐幀保存爲jpg圖片
clc;
clear all;
close all;
obj = VideoReader('D:\pictures\5.mp4');%輸入視頻位置
numFrames = obj.NumberOfFrames;% 幀的總數
numzeros= 4;%圖片name長度
nz = strcat('%0',num2str(numzeros),'d');
for k = 1:15% 讀取前15幀
frame = read(obj,k);%讀取第幾幀
id=sprintf(nz,k);
imwrite(frame,strcat('D:\pictures\',id,'.jpg'),'jpg');% 保存幀
end
轉載read知識:
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幀之後
這裏參考到兩篇帖子,特此聲明(侵刪)
原文鏈接:
https://blog.csdn.net/qq_23097931/article/details/51108747
https://blog.csdn.net/sannianyihoushuma/article/details/84205864?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task