MCPcopy Create free account
hub / github.com/OpenImagingLab/4DSloMo / main

Function main

process_video.py:101–156  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

99 print(f"Successfully created video for prefix '{prefix}': {output_video_path}")
100
101def main():
102 parser = argparse.ArgumentParser(description="Crop images and create video(s). Supports a special mode for render outputs.")
103 parser.add_argument('--input_folder', type=str, required=True, help='Path to the source folder. If it contains "renders" and "gt" subfolders, special mode is activated.')
104 parser.add_argument('--output_folder', type=str, help='(Generic mode only) Path to the folder where the final video(s) will be saved.')
105 parser.add_argument('--fps', type=int, default=25, help='Frames per second for the output video(s).')
106 parser.add_argument('--max_frames', type=int, default=None, help='Maximum number of frames for each video. Defaults to all frames.')
107 args = parser.parse_args()
108
109 renders_path = os.path.join(args.input_folder, 'renders')
110 gt_path = os.path.join(args.input_folder, 'gt')
111
112 # Special mode for processing render outputs
113 if os.path.isdir(renders_path) and os.path.isdir(gt_path):
114 print("Detected 'renders' and 'gt' subfolders. Activating special render output mode.")
115
116 # 1. Process 'renders' folder: crop images, create video, then cleanup
117 print("\n--- Processing 'renders' folder ---")
118 video_output_folder = os.path.join(args.input_folder, 'video_crop')
119 temp_renders_crop_folder = os.path.join(video_output_folder, "temp_cropped_renders")
120
121 try:
122 os.makedirs(video_output_folder, exist_ok=True)
123 crop_images(renders_path, temp_renders_crop_folder)
124 if os.listdir(temp_renders_crop_folder):
125 create_videos_by_prefix(temp_renders_crop_folder, video_output_folder, args.fps, args.max_frames)
126 else:
127 print("No images found in 'renders' folder to process.")
128 finally:
129 if os.path.exists(temp_renders_crop_folder):
130 print(f"Cleaning up temporary folder: {temp_renders_crop_folder}")
131 shutil.rmtree(temp_renders_crop_folder)
132
133 # 2. Process 'gt' folder: crop images and save them directly
134 print("\n--- Processing 'gt' folder ---")
135 gt_crop_output_folder = os.path.join(args.input_folder, 'gt_crop')
136 crop_images(gt_path, gt_crop_output_folder)
137
138 # Generic mode (original functionality)
139 else:
140 print("Running in generic mode (no 'renders'/'gt' subfolders found).")
141 if not args.output_folder:
142 parser.error("--output_folder is required in generic mode.")
143
144 temp_crop_folder = os.path.join(args.output_folder, "temp_cropped_images")
145 os.makedirs(args.output_folder, exist_ok=True)
146
147 try:
148 crop_images(args.input_folder, temp_crop_folder)
149 if os.listdir(temp_crop_folder):
150 create_videos_by_prefix(temp_crop_folder, args.output_folder, args.fps, args.max_frames)
151 else:
152 print("No images found in source folder to process.")
153 finally:
154 if os.path.exists(temp_crop_folder):
155 print(f"Cleaning up temporary folder: {temp_crop_folder}")
156 shutil.rmtree(temp_crop_folder)
157
158if __name__ == '__main__':

Callers 1

process_video.pyFile · 0.70

Calls 2

crop_imagesFunction · 0.85
create_videos_by_prefixFunction · 0.85

Tested by

no test coverage detected