@@ -70,20 +70,32 @@ def __analyze_frame_timing(self):
7070 self .logger .info ("Average time between frames: %.3f s (%.2f fps)" , avg_diff , 1 / avg_diff )
7171 self .logger .info ("Median time between frames: %.3f s (%.2f fps)" , median_diff , 1 / median_diff )
7272 self .logger .info ("Standard deviation: %.3f s" , std_diff )
73- self .logger .info ("Min time between frames: %.3f s (%.2f fps)" , min_diff , 1 / min_diff )
74- self .logger .info ("Max time between frames: %.3f s (%.2f fps)" , max_diff , 1 / max_diff )
73+ try :
74+ self .logger .info ("Min time between frames: %.3f s (%.2f fps)" , min_diff , 1 / min_diff )
75+ self .logger .info ("Max time between frames: %.3f s (%.2f fps)" , max_diff , 1 / max_diff )
76+ except ZeroDivisionError :
77+ self .logger .info ("Division by zero, skipping min and max fps calculation." )
7578
7679 self .logger .info ("Frame timing distribution:" )
7780 for range_key , count in sorted (ranges .items ()):
7881 percentage = (count / len (time_diffs )) * 100
79- self .logger .info ("%s ms: %s frames (%s.1f %)" , range_key , count , percentage )
80-
81- return {
82- 'avg_fps' : 1 / avg_diff ,
83- 'min_fps' : 1 / max_diff ,
84- 'max_fps' : 1 / min_diff ,
85- 'std_dev' : std_diff
86- }
82+ self .logger .info ("%s ms: %s frames (%.1f %%)" , range_key , count , percentage )
83+
84+ try :
85+ return {
86+ 'avg_fps' : 1 / avg_diff ,
87+ 'min_fps' : 1 / max_diff ,
88+ 'max_fps' : 1 / min_diff ,
89+ 'std_dev' : std_diff
90+ }
91+ except ZeroDivisionError :
92+ self .logger .info ("Division by zero, skipping fps calculation." )
93+ return {
94+ 'avg_fps' : 0 ,
95+ 'min_fps' : 0 ,
96+ 'max_fps' : 0 ,
97+ 'std_dev' : 0
98+ }
8799
88100 def create_video (self ):
89101 self .__populate_frame_paths ()
@@ -125,8 +137,21 @@ def create_video(input_dir: str | Path, output_path: str | Path = "output.mp4",
125137
126138
127139if __name__ == "__main__" :
140+ import argparse
141+
142+ parser = argparse .ArgumentParser (description = "Create a video from a frame folder." )
143+ parser .add_argument (
144+ "--input_dir" ,
145+ default = "./examples/results/2025-04-01_12-54-59/frames" ,
146+ type = str ,
147+ help = "Path to the input directory containing frames"
148+ )
149+ parser .add_argument ("--output_path" , default = "./output.mp4" , type = str , help = "Path to save the output video" )
150+ parser .add_argument ("--frame_type" , default = "png" , type = str , help = "Frame type (e.g., png, jpg)" )
151+ args = parser .parse_args ()
152+
128153 create_video (
129- input_dir = "example/path/to/input/dir" ,
130- output_path = "output.mp4" ,
131- frame_type = "jpg"
154+ input_dir = args . input_dir ,
155+ output_path = args . output_path ,
156+ frame_type = args . frame_type
132157 )
0 commit comments