MATLAB讀取視頻並按幀保存

%存第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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章