1、读取视频
2、对视频尺寸进行预处理到4K
3、分析每帧特征
4、将每帧特征存储到Excel表格
5、将特殊画面存进对应文件夹里
matlab
clear ;close all;clc;
%初始化
fileName = 'grayscale.mp4'; %视频名称
filepath=strcat('./input/',fileName);
obj = VideoReader(filepath);
numFrames = obj.NumFrames;% 帧的总数
h=obj.Width;
v=obj.Height;
vh_th=0.7;%16:9差异设置,abs(h/v-16/9)<vh_th不加黑框
frame_UD=zeros(2160,3840,3,'uint8');
YCbCr=zeros(2160,3840,'double');
frame_Falg=zeros(numFrames,4,'double');
APL=zeros(1,1,'double');
savepath=strcat('./output/',fileName(1:end-4));
if ~exist(savepath, 'dir')
savepath_status = mkdir(savepath);%如果路径不存在则新建一个
end
for k = 1 : numFrames% 读取数据
frame = read(obj,k);
%视频大小预处理
if abs(h/v-16/9)<vh_th
frame_UD=imresize(frame,[2160,3840],'bilinear');%16:9插值到4K
black_add=0;
else
if h>v
frame_new_h=imresize(frame,[v,3840],'bilinear');
start=fix((2160-v)/2);
frame_UD(start:start+v-1,:,:)=frame_new_h;
black_add=(2160-v)*3840;
else
frame_new_v=imresize(frame,[2160,h],'bilinear');
start=fix((3840-h)/2);
frame_UD(:,start:start+h-1,:)=frame_new_v;
black_add=(3840-h)*2160;
end
end
%APL generate
YCbCr=0.299*frame_UD(:,:,1)+0.587*frame_UD(:,:,2)+0.114*frame_UD(:,:,3);
APL=mean2(YCbCr)/255;
%0~4pixel count
if APL>=0 && APL <0.2
Gray_range=4;
elseif APL>=0.2 && APL <0.4
Gray_range=5;
elseif APL>=0.4 && APL <0.6
Gray_range=6;
elseif APL>=0.6 && APL <0.8
Gray_range=8;
elseif APL>=0.8 && APL <=1
Gray_range=10;
else
ray_range=10;
end
Gray_cnt=fix(sum(sum(sum(frame_UD < Gray_range)))/3);
if Gray_cnt>(8295+black_add)
grayscale_gradient_Flag=1;
else
grayscale_gradient_Flag=0;
end
frame_Falg(k,1)=k;
frame_Falg(k,2)=APL;
frame_Falg(k,3)=Gray_cnt;
frame_Falg(k,4)=grayscale_gradient_Flag;
% imshow(frame_UD);%显示帧
if grayscale_gradient_Flag==1
WritePath=strcat('./output/',fileName(1:end-4),'/',num2str(k),'.bmp');
imwrite(frame_UD,WritePath);% 保存帧
end
end
Writepath_excel=strcat('./output/',fileName(1:end-4),'_analysis.xlsx');
%方式1,速度慢
%Writdetail_excel = {'Frame num', 'APL', 'Gray count','grayscale_like' };
% for k=1:numFrames
% Writdetail_excel (k+1,:)={frame_Falg(k,1),frame_Falg(k,2),frame_Falg(k,3),frame_Falg(k,4)};
% end
%方式2,矩阵操作加速
Writdetail_excel (1,:)={'Frame num', 'APL', 'Gray count','grayscale_like' };
Writdetail_excel (2:numFrames+1,:)=num2cell(frame_Falg(:,:));
writecell(Writdetail_excel,Writepath_excel);
disp('Analysis Done!');