mcpField
V
Vidgrid — eyes for video

Vidgrid — eyes for video

本地服务
github.com/pawvej媒体与设计04 周前更新

关于 Vidgrid — eyes for video

vidgrid 是一个命令行工具,将视频按时间采样为带编号和时间戳的帧网格,并可附加转录文本或请求视觉 LLM 分析。它面向需要快速检查视频内容、定位片段或整理素材的用户。

主要功能

  1. 01将采样帧排成带编号的网格
  2. 02自动选择网格尺寸与采样率
  3. 03可用 faster-whisper 转录音频
  4. 04支持 Claude、GPT 和 Gemini 分析
  5. 05读写 JSON、SRT 和 TXT 字幕

适用场景

  1. 01概览会议录像并提取决策
  2. 02在屏幕录制中定位错误画面
  3. 03按镜头需求筛选库存视频素材

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"pawvej-vidgrid": {
"command": "uvx",
"args": [
"vidgrid-mcp"
],
"env": {
"VIDGRID_API_KEY": "<VIDGRID_API_KEY>"
}
}
}
}
启动命令uvx vidgrid-mcp
需要配置的环境变量
VIDGRID_API_KEY密钥Vidgrid API key (vg_live_...). Free starter credits at https://vidgrid.site/api

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypividgrid-mcp0.1.0

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

vidgrid

PyPI Python License: MIT Downloads

将视频片段转换为带标注的图像网格,用于视觉大模型分析。 默认情况下,一个单元格 = 一秒。

vidgrid 示例 — 从“Me at the zoo”生成的 3×3 网格,包含编号单元格、右上角时间戳和实际生成并嵌入图像的自动字幕

大模型无法观看视频,但可以分析单张图像。vidgrid 每秒从视频中采样一帧,将其拼成带编号和时间戳的故事板,还可以选择将结果连同提示词发送给 Claude、GPT 或 Gemini。只需上传几张图像,就能获得近似于“我的大模型刚刚看完一段视频”的效果。

工作原理

默认情况下,一个单元格 = 一秒。 自动选择器会挑选能让网格数量保持在 --max-boards(默认为 10)以下的最小网格(单元格最大、最易读)。如果长视频无法满足要求,就会增大网格;作为最后手段,会降低采样率。可使用 --fps 和 --max-boards 进行全面控制。

  • 网格大小决定一张图片能容纳多少秒的视频
  • 默认采样率为 1fps;只有在需要将网格数量控制在上限以内时,才会降至 1fps 以下
  • 时长超过 5 分钟的视频会被拒绝(请先将其剪成较短片段)
网格单元格数每张图片的秒数适用场景
2x244非常短的视频片段(2–4 秒)
3x399默认值 — 整体可读性最佳
4x41616更紧凑,但单元格更小
5x52525实验性选项 — 单元格较小,大模型准确率会下降

网格越大,质量越差。 单元格会变小,细节会丢失,大模型也更难识别文字或 UI 元素等精细内容。除非你确实需要在一张图片中塞入更多秒的视频,否则建议使用 3×3。5×5 基本上只是一个“看看会怎样”的选项。

视频会生成多少张图片

在 1fps 采样时,各种网格大小对应的网格数量:

视频时长2×23×34×45×5
3 秒1(不完整)1(不完整)1(不完整)1(不完整)
9 秒311(不完整)1(不完整)
25 秒7321
60 秒15743
186 秒(3 分钟)4721128
300 秒(5 分钟,上限)753419¹12

粗体 = auto 的选择结果——在使网格数量低于 --max-boards(默认为 10)的前提下,选择最小的网格(单元格最大)。

¹ 在 5 分钟上限处,即使使用 4×4 网格,1fps 采样也会产生超过 10 个网格,因此自动模式会降低采样率(约每 1.9 秒采样 1 个单元格),以达到 10 个网格的限制。使用 --fps 1.0 --max-boards 20 可保持 1fps 采样,并接受更多网格。

大多数视觉大模型单次请求可接受约 10–20 张图像,因此自动模式默认的上限为 10,可让完整视频通过一次模型调用处理。

安装

pip install vidgrid                         # core renderer only
pip install vidgrid[transcribe]             # + faster-whisper for --transcribe
pip install vidgrid[anthropic]              # + Claude support via --ask
pip install vidgrid[llm]                    # + Claude + GPT + Gemini
pip install vidgrid[all]                    # everything

需要 Python 3.9+,并且 ffmpeg 必须位于 PATH 中。

快速开始

# 1. Auto-pick grid and sampling rate — smallest grid that fits in 10 boards
vidgrid clip.mp4 -o grid.png

# 2. Force a specific grid
vidgrid clip.mp4 -o grid.png --grid 4x4

# 3. Force a sampling rate — 0.5fps = 1 cell every 2 seconds
vidgrid long-clip.mp4 -o grid.png --fps 0.5

# 4. Raise the max-boards ceiling (default 10) if you want more boards
vidgrid lecture.mp4 -o grid.png --max-boards 20

# 5. Render + auto-transcribe + send to Claude in one call
vidgrid lecture.mp4 --transcribe --ask "bullet-point summary"

# 6. Use existing Whisper captions, burn them onto the grid
vidgrid interview.mp4 -o grid.png --captions whisper.json --burn-captions

# 7. Let the CLI fall back to python -m if the console script isn't on PATH
python3 -m vidgrid clip.mp4 -o grid.png

你可以用它做的三件事

1. 不看视频也能总结演讲内容
vidgrid "team-meeting.mp4" \
  --transcribe \
  --ask "list the decisions made and who owns each" \
  --model claude-opus-4-7

vidgrid 每秒采样一帧,使用 Whisper 处理音频,将网格和转录文本发送给 Claude,然后输出回答。模型会根据嵌入图像的时间戳关联画面与文字。

2. 在屏幕录制中找到特定时刻
vidgrid bug-repro.mp4 --grid 3x3 \
  --ask "at which numbered frame does the error dialog appear?" \
  --model gpt-5

由于单元格有全局编号(1、2、3……)和时间戳,模型可以指出确切时刻。无需拖动进度条。

3. 为一批库存素材排序
for clip in broll/*.mp4; do
  vidgrid "$clip" -o "grids/$(basename $clip .mp4).png"
done

在单个请求中将 PNG 发送给 Claude,并让它根据镜头清单为视频片段排序或筛选。这正是 vidgrid 构建出来要实现的工作流。

竖屏与横屏

无论源视频的方向如何,vidgrid 都会保持网格为正方形(N×N), 并保留每个单元格内源视频的宽高比。横屏源视频会生成宽幅拼图;竖屏源视频会生成高幅拼图。单元格绝不会被裁切。

双层字幕(默认)

默认模式会为大模型提供两种相关输入:渲染后的网格图像,以及单独的 Whisper 转录文本。模型会根据每个单元格上显示的时间戳将两者关联起来。

这比把字幕直接烧录到图像中更好,因为:

  1. 帧的像素可以保留给实际内容
  2. 文本以词元形式呈现,比烧录成像素保真度更高
  3. 网格保持整洁,便于分享

如果需要独立的图像(适合分享或离线分析),可添加 --burn-captions。

字幕文件格式

vidgrid 可读取和写入三种字幕格式。--captions 标志会根据文件扩展名自动检测格式。--transcript-format 标志控制 --transcribe 的输出格式。

格式扩展名大小(36 个单词)适用场景
json.json~4.8 KBRemotion 工作流、需要单词置信度的工具
srt.srt~1.4 KB视频编辑器、通用字幕格式
txt.txt~0.4 KB最小、便于 grep、易于解析

JSON(默认,与 Remotion 兼容):

[
  {"text": "hello", "startMs": 0, "endMs": 500, "timestampMs": 0, "confidence": 0.98},
  ...
]

SRT(SubRip 字幕):

1
00:00:00,000 --> 00:00:00,500
hello

2
00:00:00,500 --> 00:00:01,000
world

TXT(纯文本时间戳,每行一个单词):

0.00 hello
0.50 world

任意格式都可用于输入、输出,或两者兼用。也可以混合使用——用 --captions foo.srt --transcript-format txt 读取 .srt 并写入 .txt。

Python API

from vidgrid import render

storyboard = render(
    input_path="interview.mp4",
    output_path="grid.png",
    grid="3x3",  # or "2x2", "4x4", "5x5", or None for auto
    transcribe=True,
)

print(storyboard.board_paths)        # ['grid-1.png', 'grid-2.png', ...]
print(storyboard.transcript_path)    # 'grid-transcript.json'
print(storyboard.all_samples)        # list[Sample] with timestamps

模块:vidgrid.probe、vidgrid.sample、vidgrid.compose、 vidgrid.captions、vidgrid.llm、vidgrid.presets。

输出结构

单拼图运行:

grid.png                 # the storyboard
grid.json                # sidecar: timestamps, layout, source info
grid-transcript.json     # only if --transcribe or --captions was used

多拼图运行:

grid-1.png, grid-2.png, grid-3.png, ...
grid.json                # index covering all boards + global cell numbering
grid-transcript.json

所有拼图中的单元格都采用全局编号。3 个拼图的运行会生成编号为 1–27 的单元格, 这样大模型就能无歧义地引用任意帧。

限制与注意事项

  • 视频时长硬性上限为 5 分钟。 超出时长的视频会被拒绝。可使用 ffmpeg -ss START -t 300 input.mp4 chunk.mp4 将视频切分。
  • 不进行场景检测。 v1 严格按每秒 1 帧均匀采样。不去重、不偏移——间隔始终正好为 1 秒。
  • 可变帧率视频可能存在不足一帧的定位偏差(≤1 帧),对于 1fps 采样来说可以接受。
  • 网格越大,可读性越差。 5×5 网格的单元格宽约 300px;显示人物和物体尚可,但显示密集文本或代码时效果一般。建议使用 3×3。
  • 大模型集成使用官方 SDK(anthropic、openai、google-genai),除非你通过 extras 主动请求,否则不会安装。

相关项目

vidgrid 的差异化特点:1 个单元格 = 1 秒、单元格带编号、简单的命令行、 一个包中集成多家大模型提供商。

许可证

MIT。随附的 Source Sans 3 字体根据 SIL OFL 1.1 许可。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。