video
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseAnalyze the given video and answer the user's question (or summarize it if no question was asked). Always cite timestamps () in your answer.
M:SS分析给定的视频并回答用户的问题(如果未提出问题,则总结视频)。回答中始终引用时间戳()。
M:SSRoute A — video-analyzer MCP tools available (preferred)
路径 A — 可用 video-analyzer MCP 工具(首选)
If the MCP server is connected in this session, call its tools directly — do not use the CLI:
video-analyzer- General question or no question → (detail
analyze_video)"standard" - "What happens at X:XX" / a specific moment → (time range) or
analyze_momentget_frame_at - Question answerable from speech alone → (fast, no download)
get_transcript - Title / duration / views / comments only → (no download)
get_metadata - Motion or fast UI changes →
get_frame_burst
Dense UI capture (terminal, dashboard, IDE, spreadsheet — the meaning is in small text): pass on any of these tools. Emitted frames are capped at 800 px wide by default, which turns a 1920×1080 screencast into 800×450 and drops a 15 px UI font below what a vision model can read. keeps the source resolution; a value like is the middle ground. Native frames cost several times more context, so raise it for the close read, not for the overview.
maxWidthmaxWidth: 01568如果当前会话已连接 MCP server,请直接调用其工具——不要使用 CLI:
video-analyzer- 常规问题或未提出问题 → (detail
analyze_video)"standard" - “X:XX 时发生了什么”/某个具体时刻 → (时间范围)或
analyze_momentget_frame_at - 仅凭语音即可回答的问题 → (快速,无需下载)
get_transcript - 仅查询标题/时长/观看次数/评论 → (无需下载)
get_metadata - 物体运动或快速变化的 UI →
get_frame_burst
密集 UI 捕获(终端、dashboard、IDE、电子表格——关键信息是小字号文本):使用上述任一工具时都应传入 。输出帧的默认宽度上限为 800 px,这会将 1920×1080 的屏幕录制画面变成 800×450,使 15 px 的 UI 字体小到视觉模型无法辨认。 会保留源分辨率;类似 的值则是在两者之间取得平衡。原生帧会消耗数倍的上下文,因此仅在进行精细阅读时提高该值,而不是在概览时使用。
maxWidthmaxWidth: 01568Route B — no MCP server (any agent with a shell)
路径 B — 无 MCP server(任何带 shell 的 agent)
Run the one-shot CLI via Bash (first run downloads the npm package — slow is not broken; progress streams on stderr):
bash
npx -y mcp-video-analyzer@latest analyze "<video-url-or-path>"stdout is a single JSON document: , (timestamped entries), (on-screen text), , , and — an array of pointing to JPEG key frames on disk. Then:
metadatatranscriptocrResultstimelinewarningsframes{ time, filePath, mimeType }- Parse the JSON from stdout.
- Read the images (in parallel) when the question needs visuals.
frames[].filePath - Answer from transcript + OCR + frames, citing timestamps.
Useful flags: (brief = metadata + transcript only, no frame extraction — the fast/cheap path), (filters the emitted JSON only; frames are still computed at standard detail), , (frame width cap, default 800; keeps source resolution — use it for dense UI captures whose payload is small text), (force transcription language), (where frames are copied), . Run for the full list.
--detail brief|standard|detailed--fields metadata,transcript--max-frames <1-60>--max-width <px>0--language <code>--out <dir>--force-refreshnpx -y mcp-video-analyzer@latest analyze --help通过 Bash 运行一次性 CLI(首次运行会下载 npm package——速度慢并不代表出错;进度会流式输出到 stderr):
bash
npx -y mcp-video-analyzer@latest analyze "<video-url-or-path>"stdout 是一个完整的 JSON 文档,包含 、(带时间戳的条目)、(屏幕文本)、、 和 。其中 是由 组成的数组,指向磁盘上的 JPEG 关键帧。随后:
metadatatranscriptocrResultstimelinewarningsframesframes{ time, filePath, mimeType }- 解析 stdout 中的 JSON。
- 当问题需要视觉信息时,并行读取 对应的图像。
frames[].filePath - 根据 transcript、OCR 和 frames 回答问题,并引用时间戳。
实用参数:(brief = 仅包含 metadata + transcript,不提取帧——速度快、成本低)、(仅筛选输出的 JSON;在 standard detail 下仍会计算 frames)、、(帧宽度上限,默认为 800; 表示保留源分辨率——适用于文本较小的密集 UI 捕获)、(强制指定转录语言)、(帧复制到的目录)、。运行 可查看完整参数列表。
--detail brief|standard|detailed--fields metadata,transcript--max-frames <1-60>--max-width <px>0--language <code>--out <dir>--force-refreshnpx -y mcp-video-analyzer@latest analyze --helpPrerequisites & degradation
先决条件与降级处理
- Node.js 22.12+ (required). is bundled — no install needed.
ffmpeg - Platform URLs (YouTube, Instagram, TikTok, …) require on PATH; direct
yt-dlpURLs and local files work without it. Loom transcript, metadata, and comments need no.mp4/.webm/.moveither. Loom frames usually do — Loom serves most videos as separate DASH video+audio streams that onlyyt-dlpfetches and merges; a CDN fallback covers some videos without it.yt-dlp - The tool never fails on partial results: the array carries actionable hints (yt-dlp install,
warningsfor Instagram/age-restricted, missing Whisper backend). Relay relevant warnings to the user instead of treating them as errors.YTDLP_COOKIES_FROM_BROWSER - An empty transcript alongside a "silent audio" warning means the video genuinely has no speech (common for muted Reels/Stories) — that is content, not a failure.
- Only URLs to public addresses are accepted. A URL on
http(s), a private/LAN range, alocalhostname, a UNC share, or a non-HTTP scheme is rejected up front with a message saying so — that is a deliberate refusal, not a transient error, so do not retry it or try to work around it. When the user really does want a video from their own network, tell them to restart the server with.local. Cloud metadata endpoints stay blocked even then.MCP_ALLOW_PRIVATE_URLS=1
- Node.js 22.12+(必需)。已捆绑,无需另行安装。
ffmpeg - 平台 URL(YouTube、Instagram、TikTok 等)要求系统 PATH 中提供 ;直接使用
yt-dlpURL 或本地文件时无需安装。Loom 的 transcript、metadata 和 comments 同样不需要.mp4/.webm/.mov,但通常提取 Loom frames 需要它——Loom 会将大多数视频作为独立的 DASH 视频流和音频流提供,而只有yt-dlp能获取并合并这些流;对于部分视频,也可以通过 CDN fallback 在没有yt-dlp的情况下处理。yt-dlp - 即使结果不完整,该工具也不会直接失败:数组会提供可操作的提示,例如安装
warnings、为 Instagram/受限年龄内容设置yt-dlp,以及缺少 Whisper backend。应将相关警告告知用户,而不是将其视为错误。YTDLP_COOKIES_FROM_BROWSER - 如果 transcript 为空,同时出现“silent audio”警告,则表示视频确实没有语音,这在静音的 Reels/Stories 中很常见——这属于内容本身,并非执行失败。
- 仅接受指向公开地址的 URL。位于
http(s)、私有/LAN 地址范围、localhost名称、UNC 共享路径或使用非 HTTP scheme 的 URL 会被预先拒绝,并返回相应说明。这是有意执行的拒绝,并非临时错误,因此不要重试或尝试绕过。如果用户确实需要分析其自有网络中的视频,应告知用户使用.local重启 server。即使这样,云元数据端点仍会被阻止。MCP_ALLOW_PRIVATE_URLS=1