关于 vss-summarize
vss-summarize 是通过 VSS Pipeline Manager 执行视频摘要的技能。它启动配置好的处理流程,跟踪各阶段直至完成,并可读取最终摘要或逐帧详情。
主要功能
- 01启动配置后的视频摘要流程
- 02跟踪处理阶段与完成状态
- 03读取最终摘要及逐帧摘要
- 04列出或删除摘要任务
适用场景
- 01为已导入的视频生成摘要
- 02监控视频摘要任务进度
- 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}。
前置条件
- 后端运行正常且已启用摘要 — 先进行探测;如果不满足,请使用
vss-doctor/vss-up:curl -sf "$HOST/manager/health" >/dev/null && \ curl -s "$HOST/manager/app/features" | jq '.summary // .' # confirm summary capability - 要摘要的
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