llama.cpp 完善了向视频理解模型传递场景和时间信息的方式。开发本地视频问答功能的开发者,可以按模型预期的顺序和尺寸组织视频输入。

1. 自动选择适配模型的视频输入

2026 年 11 月 4 日发布的 b12098 支持 Qwen3-VL 的视频提示格式。本次发布修改了向模型传递视频采样帧及时间标记的部分。

这一变更应用于处理视频、音频等多种输入格式的 mtmd 模块。识别出 Qwen3-VL 模型后,模块会选择对应的视频处理配置,帧选取规则和时间标记均遵循该配置。开发者无需手动拼装格式,而是交由各模型的处理路径完成。

2. 在帧之间放置时间信息

视频以每组两帧的形式传入,并在每组之前放置时间标记。这类似于在两张照片前附上拍摄时间,先告知该组的中间时刻。下方测试标记中的方括号数字表示原始视频的帧编号。

PR 测试设置了固定输入,用于与 transformers 4.57.1 的 Qwen3VLProcessor 生成的结果进行比较。以下代码是该测试预期字符串的一部分,指定了输入帧尺寸以及时间与帧的顺序。

        { {  720, 358, 24.0f, 240 }, { 704, 352 },
            "<0.3 seconds>[0][13]<1.3 seconds>[25][38]<2.4 seconds>[50][63]<3.4 seconds>[75][88]<4.5 seconds>[101][113]"
            "<5.5 seconds>[126][138]<6.6 seconds>[151][164]<7.6 seconds>[176][189]<8.6 seconds>[201][214]<9.7 seconds>[226][239]" },

3. 从整个视频中选取帧的规则

配置以每秒 2 帧为基准,根据视频时长计算选取数量。Qwen3-VL 视频处理将其限制在 4~768 帧范围内,但若原始帧数更少,则最多只选取实际原始帧数。因此,每秒采样基准和总选取数量上限共同决定输入规模。

确定选取数量后,便从原始视频的第一帧到最后一帧均匀分配帧编号。长视频达到上限时,相同数量的帧会分摊代表更长的时间段。这不是简单截取视频开头,而是从整个时段中筛选场景。

4. 根据帧数调整画面尺寸

帧尺寸采用与参考处理器相同的方式计算,后者是生成基准输入的程序。宽高会对齐模型处理的网格间距,并根据计入帧数的像素限额进行放大或缩小。测试在 patch_size 16 和 n_merge 2 的共同配置下,检查各输入对应的预期尺寸。

下表是在同一尺寸调整规则下使用不同输入的测试案例。宽高以像素为单位,帧数为传给尺寸计算的值。

表:共同尺寸调整规则下各输入的预期值

条件:patch_size 16、n_merge 2,以 Qwen3VLVideoProcessor smart_resize 为基准,像素下限 4096、上限 25165824,时间维度分组大小为 2

单位:帧数为帧,宽高为像素

根据帧数调整画面尺寸
案例帧数原始宽度原始高度计算宽度计算高度
基本取整20720358704352
超过上限76819201080224128
放大短边416403264
低于下限232326464
奇数分组取整52760155227521536
长纵向输入425060002566016

测试注释包含短边小于网格间距时先放大、超过像素限额时缩小的案例。在输入较多帧的案例中,可以看出其通过降低每帧分辨率来控制整体输入规模的设计。

5. 参考格式对齐与视频信息量之间的权衡

此次变更的优势在于将时间标记、帧排列和画面尺寸与 Qwen3-VL 的参考处理方式对齐。代价是需要筛选帧并调整画面尺寸,因此长视频的场景选取间隔会变大,细节也会受像素限额影响而减少。

实现基于现有 LFM3 视频处理结构进行了整理,使输入顺序能在测试中复现。新增的验证组件被标记为内部使用,并非供应用程序直接调用。

表格和代码中的数值用于核对参考处理器的预期值,并非模型回答质量或处理速度的测量结果。

b12098 的核心是建立一条输入路径,将 Qwen3-VL 视频的帧和时间信息与参考格式对齐。