File size: 929 Bytes
723126c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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