step1_parse_video.m 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. parse_video();
  2. %%
  3. function parse_video(resize_shape, crop_flag)
  4. %
  5. % Parsing video (*.mp4/*.avi) file(s) into image (*.jpg) files
  6. %
  7. % Written by Hio-Been Han, hiobeen.han@kaist.ac.kr
  8. %
  9. % 2020-09-30
  10. %
  11. if nargin < 1, resize_shape = [448 448]; end
  12. if nargin < 2, crop_flag = false; end
  13. %% (1) Get file info & set save directory
  14. [file_list, vid_directory] = uigetfile('*.*','MultiSelect','on');
  15. if ischar(file_list), file_list = {file_list}; end
  16. img_directory = [ 'data/frames/'];
  17. if ~isdir(img_directory), mkdir(img_directory); end
  18. convert_resolution = sprintf( '%dx%d', resize_shape(1),resize_shape(2));
  19. save_format = '.jpg';
  20. %% (2) Parse video into JPEG files
  21. for fileIdx = 1:length(file_list)
  22. % Set save directory
  23. fname = file_list{fileIdx};
  24. uniqname = fname(1:end-4);
  25. fileformat = fname(end-3:end);
  26. vidname = [vid_directory uniqname];
  27. save_directory = [img_directory uniqname '/'];
  28. if ~isdir(save_directory), mkdir(save_directory); end
  29. % Read frames
  30. v = VideoReader( [ vidname fileformat ]);
  31. nFrames = v.Duration * v.FrameRate;
  32. for frameIdx = 1:nFrames
  33. if v.hasFrame
  34. frame = v.readFrame();
  35. % Set ROI
  36. if frameIdx == 1
  37. if crop_flag
  38. mask = image_ROI_selection(frame, ['Select ROI to save' ...
  39. ' [Occlusion => Right Click]']);
  40. else
  41. mask = logical(ones([size(frame,1), size(frame,2)]));
  42. end
  43. idx_x = find( nanmean(mask,2) );
  44. idx_y = find( nanmean(mask,1) );
  45. original_resolution = sprintf( '%dx%d', size(frame,1), size(frame,2));
  46. end
  47. % Save frame
  48. % frame_valid = rgb2gray( frame(idx_x,idx_y,:) );
  49. frame_valid = rgb2gray( frame(:,60:end-60,:) );
  50. imgname_write = [num2str(sprintf('frame-%06d',frameIdx))...
  51. '-' uniqname '-from' original_resolution '-to' convert_resolution save_format];
  52. imwrite( imresize( frame_valid, resize_shape ), [ save_directory imgname_write ] )
  53. end
  54. end
  55. end
  56. end