@@ -152,7 +152,7 @@ def qa_template(self, data):
152
152
answer = f"({ chr (ord ('A' ) + answer_idx )} ) { answer } "
153
153
return question , answer
154
154
155
- def save_video_frames (self , line , num_frames = 8 , fps = - 1 ):
155
+ def save_video_frames (self , line ):
156
156
suffix = line ['video' ].split ('.' )[- 1 ]
157
157
video = line ['video' ].replace (f'.{ suffix } ' ,'' )
158
158
vid_path = osp .join (self .data_root , line ['prefix' ], line ['video' ])
@@ -161,17 +161,17 @@ def save_video_frames(self, line, num_frames=8, fps=-1):
161
161
'fps' : vid .get_avg_fps (),
162
162
'n_frames' : len (vid ),
163
163
}
164
- if num_frames > 0 and fps < 0 :
165
- step_size = len (vid ) / (num_frames + 1 )
166
- indices = [int (i * step_size ) for i in range (1 , num_frames + 1 )]
167
- frame_paths = self .frame_paths (video , num_frames )
168
- elif fps > 0 :
164
+ if self . nframe > 0 and self . fps < 0 :
165
+ step_size = len (vid ) / (self . nframe + 1 )
166
+ indices = [int (i * step_size ) for i in range (1 , self . nframe + 1 )]
167
+ frame_paths = self .frame_paths (video )
168
+ elif self . fps > 0 :
169
169
# not constrained by num_frames, get frames by fps
170
170
total_duration = video_info ['n_frames' ] / video_info ['fps' ]
171
- required_frames = int (total_duration * fps )
172
- step_size = video_info ['fps' ] / fps
171
+ required_frames = int (total_duration * self . fps )
172
+ step_size = video_info ['fps' ] / self . fps
173
173
indices = [int (i * step_size ) for i in range (required_frames )]
174
- frame_paths = self .frame_paths_fps (video , len (indices ), fps )
174
+ frame_paths = self .frame_paths_fps (video , len (indices ))
175
175
176
176
flag = np .all ([osp .exists (p ) for p in frame_paths ])
177
177
@@ -184,11 +184,11 @@ def save_video_frames(self, line, num_frames=8, fps=-1):
184
184
185
185
return frame_paths
186
186
187
- def save_video_into_images (self , line , num_frames , fps ):
188
- frame_paths = self .save_video_frames (line , num_frames , fps )
187
+ def save_video_into_images (self , line ):
188
+ frame_paths = self .save_video_frames (line )
189
189
return frame_paths
190
190
191
- def build_prompt (self , line , num_frames , video_llm , fps = - 1 ):
191
+ def build_prompt (self , line , video_llm ):
192
192
if isinstance (line , int ):
193
193
assert line < len (self )
194
194
line = self .data .iloc [line ]
@@ -200,7 +200,7 @@ def build_prompt(self, line, num_frames, video_llm, fps=-1):
200
200
if video_llm :
201
201
message .append (dict (type = 'video' , value = video_path ))
202
202
else :
203
- img_frame_paths = self .save_video_into_images (line , num_frames , fps )
203
+ img_frame_paths = self .save_video_into_images (line )
204
204
for im in img_frame_paths :
205
205
message .append (dict (type = 'image' , value = im ))
206
206
message .append (dict (type = 'text' , value = '\n Only give the best option.' ))
@@ -355,7 +355,7 @@ def qa_template(self, data):
355
355
answer = data ['answer' ]
356
356
return question , answer
357
357
358
- def save_video_frames (self , line , num_frames = 8 , fps = - 1 ):
358
+ def save_video_frames (self , line ):
359
359
suffix = line ['video' ].split ('.' )[- 1 ]
360
360
video = line ['video' ].replace (f'.{ suffix } ' ,'' )
361
361
vid_path = osp .join (self .data_root , line ['prefix' ], line ['video' ])
@@ -364,17 +364,17 @@ def save_video_frames(self, line, num_frames=8, fps=-1):
364
364
'fps' : vid .get_avg_fps (),
365
365
'n_frames' : len (vid ),
366
366
}
367
- if num_frames > 0 and fps < 0 :
368
- step_size = len (vid ) / (num_frames + 1 )
369
- indices = [int (i * step_size ) for i in range (1 , num_frames + 1 )]
370
- frame_paths = self .frame_paths (video , num_frames )
371
- elif fps > 0 :
367
+ if self . nframe > 0 and self . fps < 0 :
368
+ step_size = len (vid ) / (self . nframe + 1 )
369
+ indices = [int (i * step_size ) for i in range (1 , self . nframe + 1 )]
370
+ frame_paths = self .frame_paths (video )
371
+ elif self . fps > 0 :
372
372
# not constrained by num_frames, get frames by fps
373
373
total_duration = video_info ['n_frames' ] / video_info ['fps' ]
374
- required_frames = int (total_duration * fps )
375
- step_size = video_info ['fps' ] / fps
374
+ required_frames = int (total_duration * self . fps )
375
+ step_size = video_info ['fps' ] / self . fps
376
376
indices = [int (i * step_size ) for i in range (required_frames )]
377
- frame_paths = self .frame_paths_fps (video , len (indices ), fps )
377
+ frame_paths = self .frame_paths_fps (video , len (indices ))
378
378
379
379
flag = np .all ([osp .exists (p ) for p in frame_paths ])
380
380
@@ -387,11 +387,11 @@ def save_video_frames(self, line, num_frames=8, fps=-1):
387
387
388
388
return frame_paths
389
389
390
- def save_video_into_images (self , line , num_frames , fps ):
391
- frame_paths = self .save_video_frames (line , num_frames , fps )
390
+ def save_video_into_images (self , line ):
391
+ frame_paths = self .save_video_frames (line )
392
392
return frame_paths
393
393
394
- def build_prompt (self , line , num_frames , video_llm , fps = - 1 ):
394
+ def build_prompt (self , line , video_llm ):
395
395
if isinstance (line , int ):
396
396
assert line < len (self )
397
397
line = self .data .iloc [line ]
@@ -403,7 +403,7 @@ def build_prompt(self, line, num_frames, video_llm, fps=-1):
403
403
if video_llm :
404
404
message .append (dict (type = 'video' , value = video_path ))
405
405
else :
406
- img_frame_paths = self .save_video_into_images (line , num_frames , fps )
406
+ img_frame_paths = self .save_video_into_images (line )
407
407
for im in img_frame_paths :
408
408
message .append (dict (type = 'image' , value = im ))
409
409
return message
0 commit comments