Analyze Video Evidence
Turn a video into a reviewable evidence bundle, then answer the user's actual question from that bundle. Prefer source-backed findings over an untraceable generic summary.
Inputs
Accept either:
- a local video plus optional SRT/VTT and yt-dlp
.info.json; or - a Bilibili/YouTube URL downloaded first with
$download-web-video.
Require ffmpeg and ffprobe. Keep downloaded media, full transcripts, and
frames local unless the user authorizes publication.
Prepare the first-pass evidence
Run:
python3 <skill-dir>/scripts/prepare_evidence.py \
"./video-source/BV....mp4" \
--output-dir "./video-evidence" \
--subtitles "./video-source/BV....zh.srt" \
--info-json "./video-source/BV....info.json" \
--frame-count 24
If captions are omitted, the script prefers a nearby human Chinese caption, then automatic Chinese, English, and other SRT/VTT files. Do not claim that speech was analyzed when no captions exist.
When captions are absent:
- Extract/transcribe audio with an available local or user-approved ASR route,
such as the AX
$transcribeskill. - Save SRT or VTT beside the video.
- Rerun the evidence preparation command with
--subtitles.
Inspect before concluding
Read transcript.md, evidence-index.md, and evidence.json. View
contact-sheet.jpg, then open ambiguous individual frames at full resolution.
The first pass samples the complete timeline rather than only transcript-picked
moments.
Identify topic transitions, enumerated items, tables, slides, on-screen labels, and places where the creator revises or qualifies an earlier point. Add exact frames for those moments:
python3 <skill-dir>/scripts/prepare_evidence.py VIDEO \
--output-dir "./video-evidence" \
--subtitles CAPTIONS \
--timestamp 00:08:42 \
--timestamp 00:19:15
Read references/analysis-method.md when the task involves rankings, recommendations, factual verification, conflicting captions, or a publishable report.
Build the claim-evidence ledger
Before writing, map each material finding to:
- a transcript time range and short paraphrase;
- a frame path when the claim depends on visible content;
- confidence (
high,medium, orlow); - a caveat when the source is context-dependent or ambiguous.
Distinguish the creator's explicit statement from your inference. Never invent card names, slide text, numbers, or tiers to fill a gap.
Produce the requested artifact
Match the user's requested format. For a table or HTML guide:
- lead with the decision-useful result;
- make tiers or priorities scannable;
- preserve conditions such as act, archetype, existing synergies, or upgrade state instead of forcing a universal order;
- attach compact timestamps to every important recommendation;
- include a methodology/source note and uncertainty labels;
- do not embed the full transcript or redistribute a large frame collection.
Use the frontend design workflow for a polished HTML artifact and visually verify responsive layout with browser screenshots.
Acceptance criteria
Require all applicable conditions:
evidence.json,evidence-index.md,transcript.json, andtranscript.mdexist.- The evidence manifest records media metadata, source SHA-256, caption hash, cue count, frame timestamps, and nearby caption context.
- A full-timeline contact sheet exists when frames were requested.
- Consequential claims have timestamped speech or visual evidence.
- Inference and source statements are labeled separately.
- The final artifact answers the requested question, opens locally, remains readable on desktop and mobile, and contains no cookies or signed media URLs.
Output bundle
<evidence-dir>/
├── evidence.json
├── evidence-index.md
├── transcript.json
├── transcript.md
├── contact-sheet.jpg
└── frames/
├── uniform_...
└── targeted_...