12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- parse_video();
- %%
- function parse_video(resize_shape, crop_flag)
- %
- % Parsing video (*.mp4/*.avi) file(s) into image (*.jpg) files
- %
- % Written by Hio-Been Han, hiobeen.han@kaist.ac.kr
- %
- % 2020-09-30
- %
- if nargin < 1, resize_shape = [448 448]; end
- if nargin < 2, crop_flag = false; end
- %% (1) Get file info & set save directory
- [file_list, vid_directory] = uigetfile('*.*','MultiSelect','on');
- if ischar(file_list), file_list = {file_list}; end
- img_directory = [ 'data/frames/'];
- if ~isdir(img_directory), mkdir(img_directory); end
- convert_resolution = sprintf( '%dx%d', resize_shape(1),resize_shape(2));
- save_format = '.jpg';
- %% (2) Parse video into JPEG files
- for fileIdx = 1:length(file_list)
-
- % Set save directory
- fname = file_list{fileIdx};
- uniqname = fname(1:end-4);
- fileformat = fname(end-3:end);
- vidname = [vid_directory uniqname];
- save_directory = [img_directory uniqname '/'];
- if ~isdir(save_directory), mkdir(save_directory); end
-
- % Read frames
- v = VideoReader( [ vidname fileformat ]);
- nFrames = v.Duration * v.FrameRate;
- for frameIdx = 1:nFrames
- if v.hasFrame
- frame = v.readFrame();
-
- % Set ROI
- if frameIdx == 1
- if crop_flag
- mask = image_ROI_selection(frame, ['Select ROI to save' ...
- ' [Occlusion => Right Click]']);
- else
- mask = logical(ones([size(frame,1), size(frame,2)]));
- end
- idx_x = find( nanmean(mask,2) );
- idx_y = find( nanmean(mask,1) );
- original_resolution = sprintf( '%dx%d', size(frame,1), size(frame,2));
- end
-
- % Save frame
- % frame_valid = rgb2gray( frame(idx_x,idx_y,:) );
- frame_valid = rgb2gray( frame(:,60:end-60,:) );
- imgname_write = [num2str(sprintf('frame-%06d',frameIdx))...
- '-' uniqname '-from' original_resolution '-to' convert_resolution save_format];
- imwrite( imresize( frame_valid, resize_shape ), [ save_directory imgname_write ] )
- end
- end
- end
- end
|