Professional Video Analysis API & CLI - Powered by FFprobe
A production-ready REST API and CLI tool for comprehensive video/audio file analysis, built on top of FFprobe with 19 professional QC categories and 26 content analyzers covering 121 industry-standard parameters.
Rendiff Probe uses FFprobe from the FFmpeg project as its core media analysis engine. FFprobe is a powerful multimedia stream analyzer that provides detailed information about media files.
- FFprobe is part of the FFmpeg Project
- FFprobe is licensed under the LGPL/GPL license
- This project wraps FFprobe functionality with enhanced QC analysis, REST API, and CLI interfaces
We are grateful to the FFmpeg community for developing and maintaining such a robust media analysis tool.
- Comprehensive FFprobe Analysis: Full format, stream, frame, and packet analysis via FFprobe
- 121 Industry-Standard QC Parameters: Complete broadcast and streaming quality control
- 26 Parallel Content Analyzers: Real-time analysis using FFmpeg filters (signalstats, idet, astats, etc.)
- REST API (
rendiff-probe): HTTP interface for video analysis - CLI Tool (
rendiffprobe-cli): Command-line tool for local analysis - GraphQL API: Flexible query interface for advanced integrations
- URL & HLS Analysis: Direct URL probing and HLS stream analysis
- Batch Processing: Process multiple files/URLs in parallel
- WebSocket Progress: Real-time progress updates for long operations
- LLM-Powered Insights: AI-generated professional analysis reports
- Docker Ready: Production-ready containerized deployment
- SQLite Embedded: Zero-configuration database
- Valkey/Redis Caching: High-performance result caching
Professional broadcast and streaming QC analysis covering:
Header/Format Analysis: Container validation, codec profiles, resolution, frame rate, bit depth, endianness Video Quality: Baseband analysis (YMIN/YMAX/YAVG), gamut checking, blockiness, blurriness, noise, line errors Video Content: Black frames, freeze frames, letterboxing, color bars, safe areas, field dominance, temporal complexity Audio Analysis: EBU R128 loudness, clipping, silence, phase correlation, channel mapping, frequency analysis Broadcast Compliance: HDR (HDR10/Dolby Vision/HLG), MXF validation, IMF compliance, transport stream analysis, timecode continuity Safety & Accessibility: PSE flash detection, AFD analysis, stream disposition, data integrity
- Docker 24.0+ with Docker Compose (for API)
- Go 1.24+ (for CLI)
- FFprobe installed (for CLI)
- 2GB RAM minimum (4GB recommended)
# Clone the repository
git clone https://github.com/rendiffdev/rendiff-probe.git
cd rendiff-probe
# Quick start API (development mode)
make quick
# Or build CLI for local use
go build -o rendiffprobe-cli ./cmd/rendiffprobe-cli# Analyze a video file with full QC report
rendiffprobe-cli analyze video.mp4 --format report
# Get JSON output for automation
rendiffprobe-cli analyze video.mp4 --format json --output result.json
# Quick file info
rendiffprobe-cli info video.mp4
# List all QC categories
rendiffprobe-cli categoriesYour API is now running at http://localhost:8080
# Check health
curl http://localhost:8080/health
# Expected response:
{
"status": "healthy",
"service": "rendiff-probe",
"version": "2.0.0",
"powered_by": "FFprobe (FFmpeg)",
"features": {
"file_probe": true,
"url_probe": true,
"hls_analysis": true,
"batch_processing": true,
"websocket": true,
"graphql": true,
"llm_insights": true
},
"qc_tools": ["AFD Analysis", "Dead Pixel Detection", ...],
"ffprobe_validated": true
}GET /healthReturns service health status and available QC tools.
Response:
{
"status": "healthy",
"service": "rendiff-probe",
"powered_by": "FFprobe (FFmpeg)",
"qc_tools": [
"AFD Analysis",
"Dead Pixel Detection",
"PSE Flash Analysis",
"HDR Analysis",
"Audio Wrapping Analysis",
"Endianness Detection",
"Codec Analysis",
"Container Validation",
"Resolution Analysis",
"Frame Rate Analysis",
"Bitdepth Analysis",
"Timecode Analysis",
"MXF Analysis",
"IMF Compliance",
"Transport Stream Analysis",
"Content Analysis",
"Enhanced Analysis",
"Stream Disposition Analysis",
"Data Integrity Analysis"
],
"ffprobe_validated": true
}POST /api/v1/probe/file
Content-Type: multipart/form-dataUpload a video/audio file for comprehensive analysis using FFprobe.
Request:
curl -X POST \
-F "file=@video.mp4" \
http://localhost:8080/api/v1/probe/fileResponse:
{
"analysis_id": "550e8400-e29b-41d4-a716-446655440000",
"filename": "video.mp4",
"size": 1048576,
"result": {
"format": {
"filename": "/tmp/upload_1234567890_video.mp4",
"nb_streams": 2,
"format_name": "mov,mp4,m4a,3gp,3g2,mj2",
"duration": "60.500000",
"bit_rate": "5000000"
},
"streams": [
{
"index": 0,
"codec_type": "video",
"codec_name": "h264",
"width": 1920,
"height": 1080,
"r_frame_rate": "30/1"
},
{
"index": 1,
"codec_type": "audio",
"codec_name": "aac",
"sample_rate": "48000",
"channels": 2
}
],
"enhanced_analysis": {
"timecode_analysis": {...},
"hdr_analysis": {...},
"codec_analysis": {...},
"data_integrity": {...}
}
}
}POST /api/v1/probe/url
Content-Type: application/jsonAnalyze a video file from a URL without uploading.
Request:
curl -X POST \
-H "Content-Type: application/json" \
-d '{"url": "https://example.com/video.mp4", "include_llm": true}' \
http://localhost:8080/api/v1/probe/urlPOST /api/v1/probe/hls
Content-Type: application/jsonAnalyze HLS streams for quality, compliance, and performance.
Request:
curl -X POST \
-H "Content-Type: application/json" \
-d '{
"manifest_url": "https://example.com/stream.m3u8",
"analyze_segments": true,
"analyze_quality": true,
"validate_compliance": true,
"max_segments": 10
}' \
http://localhost:8080/api/v1/probe/hlsPOST /api/v1/batch/analyze # Start batch job
GET /api/v1/batch/status/:id # Get job statusProcess multiple files or URLs in parallel.
POST /api/v1/graphql
GET /api/v1/graphql # GraphiQL interfaceQuery and mutate via GraphQL for flexible data access.
The CLI provides the same powerful analysis capabilities without requiring a running API server.
| Command | Description |
|---|---|
analyze |
Full QC analysis with all 26 content analyzers |
categories |
List available QC analysis categories |
info |
Quick file information (basic metadata) |
version |
Show version information |
- report: Human-readable comprehensive QC report
- json: Machine-readable JSON output
- text: Concise text summary
# Full comprehensive report
rendiffprobe-cli analyze video.mp4 --format report
# JSON for automation/scripting
rendiffprobe-cli analyze video.mp4 --format json
# Save output to file
rendiffprobe-cli analyze video.mp4 --format json --output result.json
# Analyze multiple files
rendiffprobe-cli analyze video1.mp4 video2.mp4 --format text
# Quick metadata check
rendiffprobe-cli info video.mp4
# Set timeout for large files
rendiffprobe-cli analyze large_video.mp4 --timeout 300make minimal- Core services only: API + Valkey + Ollama
- Memory: ~2-3GB
- Best for: Development, testing
make quick- Ready in 2 minutes
- No authentication required
- Best for: Quick testing, demos
make prod- Full monitoring stack
- Authentication enabled
- Automated backups
- Best for: Production deployments
View Full Architecture Documentation - Detailed system design, component diagrams, and implementation patterns.
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β CLIENT LAYER β
β βββββββββββββββ βββββββββββββββ βββββββββββββββ β
β β REST API β β GraphQL β β CLI Tool β β
β ββββββββ¬βββββββ ββββββββ¬βββββββ ββββββββ¬βββββββ β
βββββββββββββΌβββββββββββββββββββββΌβββββββββββββββββββββΌββββββββββββββββββββββββββ
β β β
βββββββββββββΌβββββββββββββββββββββΌβββββββββββββββββββββΌββββββββββββββββββββββββββ
β MIDDLEWARE LAYER β
β [Recovery] β [RequestID] β [Logging] β [RateLimit] β [Auth] β [Validation] β
βββββββββββββββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββββββββββββ
β
βββββββββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββ
β SERVICE LAYER β
β ββββββββββββββββββ ββββββββββββββββββ ββββββββββββββββββ β
β β AnalysisServiceβ β ReportService β β SecretRotation β β
β βββββββββ¬βββββββββ ββββββββββββββββββ ββββββββββββββββββ β
βββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β ANALYSIS ENGINE β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Content Analyzer (26 Parallel Goroutines) β β
β β ββββββββββββββ¬βββββββββββββ¬βββββββββββββ¬βββββββββββββ¬βββββββββββββ β β
β β β Video β Audio β HDR β Broadcast β Integrity β β β
β β β Quality β Analysis β Analysis β Compliance β Analysis β β β
β β βββββββ¬βββββββ΄ββββββ¬βββββββ΄ββββββ¬βββββββ΄ββββββ¬βββββββ΄ββββββ¬βββββββ β β
β β β β β β β β β
β β βββββββΌβββββββββββββΌβββββββββββββΌβββββββββββββΌβββββββββββββΌβββββββ β β
β β β FFmpeg Filters (signalstats, idet, ebur128, etc) β β β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β
β βββββββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββ β
β β FFprobe / FFmpeg Binaries β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βββββββββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββ
β DATA LAYER β
β ββββββββββββββββββ ββββββββββββββββββ ββββββββββββββββββ β
β β SQLite (Store) β β Valkey (Cache) β β File Storage β β
β ββββββββββββββββββ ββββββββββββββββββ ββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
| Layer | Components | Purpose |
|---|---|---|
| Client | REST API, GraphQL, CLI | Multiple interface options |
| Middleware | Auth, RateLimit, Logging | Request processing pipeline |
| Service | Analysis, Reports, Secrets | Business logic encapsulation |
| Analysis Engine | 26 concurrent analyzers | FFmpeg-based quality analysis |
| Data | SQLite, Valkey, FileStore | Persistence and caching |
| Category | Analyzers | FFmpeg Filters | Standards |
|---|---|---|---|
| Video Quality | Baseband, Quality Score, Blockiness, Blurriness, Noise, Line Errors | signalstats, entropy | EBU R103 |
| Video Content | Black Frames, Freeze Frames, Letterbox, Color Bars, Safe Areas, Temporal Complexity, Field Dominance, Differential Frames | blackdetect, freezedetect, cropdetect, idet | ITU-R BT.814 |
| Audio Quality | Loudness (EBU R128), Clipping, Silence, Phase, Channel Mapping, Frequency Analysis | ebur128, astats, volumedetect | EBU R128, ITU-R BS.1770 |
| HDR/Color | HDR10, Dolby Vision, HLG, Color Space, Gamut | signalstats BRNG | Rec.2020, SMPTE ST 2086 |
| Broadcast | Timecode Continuity, MXF Validation, IMF Compliance, Transport Stream | - | SMPTE 12M, ST 377, ST 2067 |
| Safety | PSE Flash Detection, AFD Analysis, Test Tone Detection | - | ITU-R BT.1702, Ofcom |
| Format | Container, Codec, Resolution, Frame Rate, Bit Depth, Endianness | - | - |
| Integrity | Data Integrity, Stream Disposition, Dropout Detection | - | CRC32, MD5 |
View Complete QC Parameters Reference - Detailed documentation of all 19 categories with 121 parameters
| # | Category | Key Parameters | Standards | Use Cases |
|---|---|---|---|---|
| 1 | AFD Analysis | AFD codes, aspect ratio validation | ITU-R BT.1868 | Broadcast distribution |
| 2 | Dead Pixel Detection | Stuck/dead/hot pixels, defect maps | Computer Vision | Camera QC, acquisition |
| 3 | PSE Flash Analysis | Flash rate, luminance changes, risk level | ITC/Ofcom, ITU-R BT.1702 | Broadcast safety |
| 4 | HDR Analysis | MaxCLL, MaxFALL, color gamut | HDR10, Dolby Vision, HLG | Streaming platforms |
| 5 | Audio Wrapping | Channel mapping, embedding format | BWF, RF64, AES3 | Post-production |
| 6 | Endianness Detection | Byte order, platform compatibility | - | Cross-platform workflows |
| 7 | Codec Analysis | Profile, level, bitrate efficiency | - | Format validation |
| 8 | Container Validation | Structure, metadata, muxing pattern | MP4, MKV, MOV | Workflow compatibility |
| 9 | Resolution Analysis | PAR, DAR, display optimization | - | Quality validation |
| 10 | Frame Rate Analysis | Temporal accuracy, VFR detection | Broadcast standards | Temporal analysis |
| 11 | Bitdepth Analysis | Color precision, dynamic range | 8/10/12-bit | HDR compatibility |
| 12 | Timecode Analysis | SMPTE TC, drop frame, continuity | SMPTE 12M | Broadcast, post |
| 13 | MXF Analysis | OP patterns, essence containers | SMPTE ST 377 | Professional broadcast |
| 14 | IMF Compliance | CPL, OPL, application profiles | SMPTE ST 2067 | Netflix delivery |
| 15 | Transport Stream | PID mapping, PSI/SI, continuity | MPEG-TS | IPTV, streaming |
| 16 | Content Analysis | 26 parallel analyzers (see below) | Multiple | Real-time QC |
| 17 | Enhanced Analysis | Quality scoring, risk assessment | - | Advanced metrics |
| 18 | Stream Disposition | SDH, audio descriptions, languages | Section 508, WCAG | Accessibility |
| 19 | Data Integrity | CRC32, MD5, corruption detection | - | File validation |
| Variable | Default | Description |
|---|---|---|
PORT |
8080 |
API port |
LOG_LEVEL |
info |
Log level (debug, info, warn, error) |
FFPROBE_PATH |
ffprobe |
Path to FFprobe binary |
DB_PATH |
./data/rendiff-probe.db |
SQLite database path |
VALKEY_URL |
valkey:6379 |
Valkey/Redis connection |
| Variable | Description |
|---|---|
JWT_SECRET |
JWT signing secret (required in production) |
API_KEY |
API key for authentication |
RATE_LIMIT_RPM |
Rate limit per minute |
# Service Management
make start # Start all services
make stop # Stop all services
make restart # Restart services
make status # Show status
make logs # View logs
make health # Check health
# Development
make test-unit # Run unit tests
make test-coverage # Run tests with coverage
make lint # Run linter
# Build
go build -o rendiff-probe ./cmd/rendiff-probe
go build -o rendiffprobe-cli ./cmd/rendiffprobe-cli
# Maintenance
make update # Update services
make backup # Create backup
make clean # Clean everything# Run all tests
make test-unit
# Run with coverage
make test-coverage
# Run specific package
go test -v ./internal/ffmpeg/...
# Run with race detection
make test-race| Document | Description | Audience |
|---|---|---|
| User Manual | Complete guide for using the API and CLI | End Users |
| Developer Guide | Contributing to and extending the codebase | Developers |
| Architecture | System design and component diagrams | Architects |
| Document | Description |
|---|---|
| QC Analysis List | All 19 QC categories with 121 parameters |
| API Reference | OpenAPI/Swagger documentation |
| Changelog | Version history and release notes |
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Make your changes
- Run tests (
make test-unit) - Commit your changes
- Push to the branch
- Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- FFprobe/FFmpeg: Licensed under LGPL/GPL - see FFmpeg License
- Issues: GitHub Issues
- Documentation: docs/
Rendiff Probe - Professional Video Analysis, Powered by FFprobe
Built for the video processing community