视频语言模型:时间 token 与时序定位 本节摘要:视频不是一堆照片。5 秒片段有因果顺序、动作动词、事件时序,是图像模型无法表达的。Video-LLaMA(Zhang 等人,2023 年 6 月)发布了第一个带音视频定位的开源视频-LLM。VideoChat 与 Video-LLaVA 把这个模式规模化。到 2025 年,Qwen2.5-VL 的 TMRoPE 闭合了与前沿闭源模型的差距。每个系统用不同方式解决时间 token——每片段一个 Q-former、每帧拼接池化、每 token 一个 TMRoPE。本节读这些模式,搭一个均匀 vs 动态帧采样器,并在时序定位任务上评估。 学习目标 阅读完本节,你应当能够: 解释为什么时间位置编码会独立于视觉编码器改变视频 VLM 的性能。
本节摘要:视频不是一堆照片。5 秒片段有因果顺序、动作动词、事件时序,是图像模型无法表达的。Video-LLaMA(Zhang 等人,2023 年 6 月)发布了第一个带音视频定位的开源视频-LLM。VideoChat 与 Video-LLaVA 把这个模式规模化。到 2025 年,Qwen2.5-VL 的 TMRoPE 闭合了与前沿闭源模型的差距。每个系统用不同方式解决时间 token——每片段一个 Q-former、每帧拼接池化、每 token 一个 TMRoPE。本节读这些模式,搭一个均匀 vs 动态帧采样器,并在时序定位任务上评估。
阅读完本节,你应当能够:
1 分钟、30 FPS 的视频是 1800 帧。每帧 196 个视觉 token(ViT-B @ 224),共 35.2 万 token——比 2024 年代任何 LLM 上下文都大。
三种压缩策略:
每种权衡不同:子采样丢时间细节,池化丢空间细节,Q-former 两者都丢一点但省 token。
时间位置编码是另一轴:模型怎么知道第 5 帧在第 6 帧之前?选项包括简单一维时间 RoPE(Video-LLaMA)、可学习时间嵌入(Video-LLaVA)、TMRoPE(Qwen2.5-VL,完整三维)。
Video-LLaMA(2023)是第一个开源视频-LLM。架构:
强项:音视频联合推理。弱项:固定片段长度,无法任意时间定位。
VideoChat 保留 Video-LLaMA 思路但去掉音频并简化。Video-LLaVA(Lin 等人,2023)在图像与视频帧上训练单一视觉编码器(「投影前对齐」),给出统一表示。两者都是冻结 CLIP 编码器 + MLP + LLM。
两者都不处理长视频,都是 8~16 帧系统。
Qwen2.5-VL 引入 TMRoPE——时间-模态旋转位置嵌入。每个 patch token 携带 (t, h, w) 位置,其中 t 是真实时间戳(不是帧索引)。
与简单时间嵌入的关键差异:
TMRoPE 使「猫在第几秒跳?」这类查询成为可能。模型能输出「在 4.2 秒」。Video-LLaMA 只能说「片段早期」。
1 FPS、每帧 576 token,5 分钟片段是 17.28 万 token。Qwen2.5-VL-72B 的 128k 上下文能扛但贵。
3×3 双线性池化降到每帧 64 token → 5 分钟 1.92 万 token。大多数任务的甜点。
agent 工作流(空间细节不那么重要)可更激进(6×6 → 每帧 16 token)。
一次完整的视频-VLM 评估要打全四个。它们压不同轴——TempCompass 全关于顺序,EgoSchema 关于 3 分钟以上推理,VideoMME 跨时长。
时间定位的输出格式:
{"event": "jump", "start": 4.1, "end": 4.3}。Qwen2.5-VL 训这个。<time>4.1</time> token 与答案交错。Qwen2.5-VL 的内部格式。基于 token 对下游最精确,Qwen2.5-VL 的 JSON 输出直接可解析。
2026 年视频 VLM:
code/main.py 含:
def dynamic_fps_sampler(video, duration, motion_curve, max_frames=32): # motion_curve[i] = 第 i 秒的运动强度 total_motion = sum(motion_curve) # 按运动强度分配帧数 frames = [] for sec in range(int(duration)): n = max(1, int(max_frames * motion_curve[sec] / total_motion)) frames.extend(sample_frames_in_second(video, sec, n)) return frames[:max_frames]
def evaluate_grounding(pred_start, pred_end, gt_start, gt_end, tolerance=0.5): # IoU 风格: 预测区间与真值区间的交并比 inter = max(0, min(pred_end, gt_end) - max(pred_start, gt_start)) union = max(pred_end, gt_end) - min(pred_start, gt_start) iou = inter / union if union > 0 else 0 return {"iou": iou, "within_tolerance": abs(pred_start - gt_start) < tolerance}
💡 时间编码为何独立于编码器:同样的 ViT、同样的帧,只换时间位置编码(1D RoPE → TMRoPE),TempCompass 也能涨几分。因为模型对「4.2 秒」与「第 15 帧」的内部表示完全不同——绝对时间让跨采样率的推理一致。
def tmrope(q, t_absolute, h, w, d): # t 用真实秒数, 非帧索引 — 跨采样率一致 band = d // 3 return mrope_rotate(q, t=t_absolute, h=h, w=w) # 动态 FPS 下不均匀间距天然处理
工程取舍:要任意时间定位用 Qwen2.5-VL(TMRoPE);要音视频联合用 Video-LLaMA;要统一图/视频表示用 Video-LLaVA;要事件精准用 VideoAgent。
本节产出 outputs/skill-video-vlm-frame-planner.md。给定视频任务(监控、动作识别、时序定位、摘要),它挑帧采样器、池化因子、输出格式与预期精度档。
采样选择:为 3 分钟烹饪演示选均匀 vs 动态 FPS,用 token 数论证。
TMRoPE 增量:TMRoPE 相对简单时间嵌入表,具体加了什么?
JSON schema:写一个 VLM 能学会发出的时序定位 JSON schema,含错误情况。
读论文:读 Video-LLaVA 第 3 节「投影前对齐」,为什么这比分别训图像与视频编码器更好?
基准差距:查 VideoMME 排行榜,2026 年顶级开源与顶级闭源的差距是多少?差距里多少归因于时间编码 vs 基座 LLM 规模?
下一节,我们将进入长视频——百万 token 理解,处理整部电影、整场讲座,需要分层记忆、token 合并与检索增强,是上下文工程在多模态的极致考验。