Overview
VideoAnalyzer is the video counterpart to AudioAnalyzer: one shared .NET 9 library and CLI that wraps a current FFmpeg/ffprobe build, replacing a set of legacy DirectShow-based tools whose behaviour depended on whichever codec packs happened to be installed on a machine. Every probe, extraction and transcode now behaves identically on every host.
Capabilities
Probing & proxies
- Container, codec, resolution, frame rate, bitrate and duration — including MXF, which the legacy toolchain could not read at all
- Single-frame keyframe grabs and scene-detected multi-keyframe extraction for storyboards and chapter markers
- MP4/H.264 proxy transcodes with fixed presets, ready for browser playback and editing
Quality control in a single pass
- Black-frame, frozen-frame and silent-audio detection with start/end/duration
- EBU R128 loudness (integrated, range, true peak)
- Interlace and letterbox/pillarbox detection to drive transcode-profile decisions
- Reference-slate/leader detection, shot-length and cut-rate statistics
Content understanding
- Whisper spoken-language identification and timecoded transcription, plus a scene-level transcript ("what was said during each shot?")
- Burned-in caption and timecode OCR
- Per-keyframe CLIP embeddings and zero-shot classification — the building blocks for text-to-video search
- Perceptual-hash near-duplicate detection and SHA-256 integrity checksums
- Container metadata extraction with GPS privacy handling
Derivatives
- Contact sheets and animated GIF previews for asset lists and hover previews
- Dual-fisheye 360° stitching
- Social-media reframing to 9:16, 1:1 and 4:5
Engineering highlights
- "Run the real tool, parse its real output" — no reimplemented codecs, no hidden behaviour
- FFmpeg build fetched on demand rather than checked into source control
- Results emitted as routed JSON under a fixed persistence contract, shared with AudioAnalyzer and ImageAnalyzer
- Verified against real and synthetic samples in an xUnit suite