mcpField
V
vss-summarize

vss-summarize

github.com/open-edge-platform生产力175102 次安装今天更新
代码仓库

关于 vss-summarize

vss-summarize 是通过 VSS Pipeline Manager 执行视频摘要的技能。它启动配置好的处理流程,跟踪各阶段直至完成,并可读取最终摘要或逐帧详情。

主要功能

  1. 01启动配置后的视频摘要流程
  2. 02跟踪处理阶段与完成状态
  3. 03读取最终摘要及逐帧摘要
  4. 04列出或删除摘要任务

适用场景

  1. 01为已导入的视频生成摘要
  2. 02监控视频摘要任务进度
  3. 03结合最终摘要查看逐帧说明

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/open-edge-platform/edge-ai-libraries --skill vss-summarize

安装后在 Claude Code 中输入/vss-summarize确认已加载。

附带文件references/summary-request.md

详细介绍

VSS 摘要

通过 Pipeline Manager 运行摘要工作流。请自行运行 curl 命令 并转述结果。端点使用 nginx 的 /manager 前缀。

设置 HOST=http://${HOST_IP:-localhost}:${APP_HOST_PORT:-12345}。

前置条件

  1. 后端运行正常且已启用摘要 — 先进行探测;如果不满足,请使用 vss-doctor / vss-up:
    curl -sf "$HOST/manager/health" >/dev/null && \
    curl -s "$HOST/manager/app/features" | jq '.summary // .'   # confirm summary capability
    
  2. 要摘要的 videoId — 使用 POST /manager/videos 上传视频(multipart, 字段为 video),该请求会返回 { "videoId": "…" }。也可以列出现有视频 — 请注意, 响应是一个对象 { "videos": [...] },不是裸数组,而且 name 是生成的哈希值(实际文件名位于 url / dataStore.fileName 中):
    curl -s -X POST "$HOST/manager/videos" -F "video=@/path/to/clip.mp4" | jq .
    curl -s "$HOST/manager/videos" | jq '.videos[] | {videoId, file: .dataStore.fileName}'
    

1. 启动摘要工作流

POST /manager/summary。请求体包含必填字段 — 缺少 title、 sampling.* 或 evam.evamPipeline 中的任何字段都会返回 400。完整 schema、提示词覆盖和音频选项请参阅 references/summary-request.md。

最简有效请求:

curl -s -X POST "$HOST/manager/summary" \
  -H 'Content-Type: application/json' \
  -d '{
    "title": "Loading dock review",
    "videoId": "<VIDEO_ID>",
    "sampling": { "chunkDuration": 20, "samplingFrame": 5, "frameOverlap": 0, "multiFrame": 5 },
    "evam": { "evamPipeline": "object_detection" },
    "produceFinalSummary": true
  }' | jq .
# → { "summaryPipelineId": "<STATE_ID>" }

采样约束: Pipeline Manager 强制要求 multiFrame == frameOverlap + samplingFrame。当 frameOverlap: 0 时,设置 multiFrame == samplingFrame。不匹配 → 400 "Multi frame mismatch"。 evamPipeline 的值为 object_detection | video_ingestion 之一。

2. 轮询直至完成

返回的 summaryPipelineId 就是 stateId。GET /manager/summary/{stateId} 没有顶层 status/progress 字段(只有 /raw 才有)— 进度位于 各阶段字段中:

STATE_ID=<STATE_ID>
curl -s "$HOST/manager/summary/$STATE_ID" | jq '{
  chunking: .chunkingStatus,         # string, "complete" when chunked
  frames:   .frameSummaryStatus,     # COUNTS object: {complete, inProgress, na, ready}
  video:    .videoSummaryStatus,     # string: "na" → "inProgress" → "complete"  ← real done signal
  audio:    .audioTranscriptSummaryStatus,
  summary_len: (.summary | length)
}'

⚠️ 完成状态是 videoSummaryStatus == "complete",而不是 summary 非空。最终 summary 文本会在 videoSummaryStatus 仍为 "inProgress" 时逐步流式写入, 因此按“summary 长度 > 0”进行轮询会得到被截断且句子未完的结果。务必以 videoSummaryStatus 作为判断条件。当 produceFinalSummary: false 时没有最终阶段 — 改为以 frameSummaryStatus.inProgress == 0 作为判断条件。

until curl -s "$HOST/manager/summary/$STATE_ID" \
       | jq -e '.videoSummaryStatus == "complete"' >/dev/null; do sleep 10; done

摘要处理较慢(VLM 逐块处理 + LLM map-reduce)— 需要几分钟,而不是几秒。

3. 获取摘要

curl -s "$HOST/manager/summary/$STATE_ID" | jq -r '.summary'   # final map-reduced summary
# Per-chunk captions live in .frameSummaries[] (each: frameKey, status, summary).
# NOT in .chunks[] — those only carry {chunkId, duration, audioTranscripts}:
curl -s "$HOST/manager/summary/$STATE_ID" | jq -r '.frameSummaries[] | "[\(.frameKey)] \(.summary)"'
curl -s "$HOST/manager/summary/$STATE_ID/raw" | jq .   # everything (audio, frames, status, …)

展示最终摘要文本;如有帮助,可提供逐块详情。音频中没有语音时, audioTranscriptSummary 会说明这一点 — 这不是错误。

管理

curl -s "$HOST/manager/summary" | jq '.[] | {stateId, title}'   # list all
curl -s -X DELETE "$HOST/manager/summary/$STATE_ID"             # delete one

评论

支持 Markdown