import decord import numpy as np from qwen_vl_utils import process_vision_info def build_video_item(path, fps, max_frames, max_pixels): return {"type": "video", "video": str(path), "fps": fps, "max_frames": max_frames, "max_pixels": max_pixels} def prepare(messages, video_path): out = process_vision_info(messages, return_video_kwargs=True) videos = out[1] vk = out[2] if len(out) > 2 else {} vk = {k: (v[0] if isinstance(v, list) and len(v) == 1 else v) for k, v in vk.items()} vr = decord.VideoReader(str(video_path), num_threads=1) n_native = len(vr) native_fps = float(vr.get_avg_fps()) n = videos[0].shape[0] idx = np.linspace(0, n_native - 1, n).round().astype(int) meta = [{"fps": native_fps, "duration": float(n_native / native_fps), "total_num_frames": int(n_native), "frames_indices": idx}] vk["video_metadata"] = meta return videos, vk