in sat/data_video.py [0:0]
def process_fn_video(src, image_size, fps, num_frames, skip_frms_num=0.0, txt_key="caption"):
while True:
r = next(src)
if "mp4" in r:
video_data = r["mp4"]
elif "avi" in r:
video_data = r["avi"]
else:
print("No video data found")
continue
if txt_key not in r:
txt = ""
else:
txt = r[txt_key]
if isinstance(txt, bytes):
txt = txt.decode("utf-8")
else:
txt = str(txt)
duration = r.get("duration", None)
if duration is not None:
duration = float(duration)
else:
continue
actual_fps = r.get("fps", None)
if actual_fps is not None:
actual_fps = float(actual_fps)
else:
continue
required_frames = num_frames / fps * actual_fps + 2 * skip_frms_num
required_duration = num_frames / fps + 2 * skip_frms_num / actual_fps
if duration is not None and duration < required_duration:
continue
try:
frames = process_video(
io.BytesIO(video_data),
num_frames=num_frames,
wanted_fps=fps,
image_size=image_size,
duration=duration,
actual_fps=actual_fps,
skip_frms_num=skip_frms_num,
)
frames = (frames - 127.5) / 127.5
except Exception as e:
print(e)
continue
item = {
"mp4": frames,
"txt": txt,
"num_frames": num_frames,
"fps": fps,
}
yield item