Files
VMAFOptimiser/README.md
2026-01-03 11:57:26 +01:00

104 lines
3.3 KiB
Markdown

# VMAF Optimiser
**Intelligent Video Library Optimization Pipeline**
Automatically optimizes your video library (Movies/TV) by finding the best compression (AV1/HEVC) that maintains a high visual quality target (VMAF 93+).
## Features
- **Hybrid Encoding:**
- Uses **Hardware Acceleration** (NVIDIA NVENC, AMD AMF, Intel QSV, Apple VideoToolbox) for fast encoding.
- Uses **Software Encoding** (CPU) as a robust fallback.
- **VMAF Targeted:** Ensures visual quality matches the original (Target VMAF 93+).
- **Multi-Platform:** Runs on **Windows**, **Linux**, and **macOS**.
- **Distributed Processing:** Run multiple workers across multiple PCs sharing the same network library.
- **Safety First:**
- Locks files to prevent double-processing.
- Verifies output size and integrity before replacing.
- "Smart Resume" - skips already processed files.
---
## Directory Structure
```
VMAFOptimiser/
├── bin/ # Place ab-av1.exe here (or install to PATH)
├── logs/ # Local logs (processed, rejected, stats)
├── locks/ # Local lock files (if network not available)
├── src/
│ ├── smart_gpu_encoder.py # Main encoder engine
│ ├── smart_monitor.py # TUI Dashboard (Watchdog)
│ ├── vmaf_common.py # Shared logic
│ └── smart_encoder.py # Legacy CPU-only engine
├── run.ps1 # Windows One-Click Start
└── README.md
```
## Setup & Installation
### 1. Requirements
- **Python 3.10+**
- **FFmpeg** (with libsvtav1/libx265 and HW drivers)
- Windows: `choco install ffmpeg`
- macOS: `brew install ffmpeg`
- Linux: `sudo apt install ffmpeg`
- **ab-av1** (VMAF calculator)
- Download from [GitHub](https://github.com/alexheretic/ab-av1) and place in `bin/` OR install via `cargo install ab-av1`
### 2. Install Python Deps
```bash
pip install watchdog rich
```
### 3. Usage
#### Interactive Dashboard (Recommended)
Monitors directories and shows a TUI with progress bars.
```bash
python src/smart_monitor.py --tv-dir "Z:\tv" --content-dir "Z:\content" --jobs 2
```
#### Headless / Background (Cron/Task Scheduler)
Runs once through the library and exits.
```bash
python src/smart_gpu_encoder.py --tv-dir "Z:\tv" --content-dir "Z:\content" --jobs 4
```
---
## Multi-PC Setup
To speed up processing, you can run this script on multiple computers simultaneously pointing to the same NAS/Network Share.
1. **Map Network Drive:** Ensure `Z:\` (or whatever path) is mapped on ALL computers.
2. **Shared Locks:** The script automatically attempts to create a `.vmaf_locks` folder in the parent directory of your TV folder (e.g., `Z:\.vmaf_locks`).
3. **Run:** Start the script on PC 1, PC 2, etc. They will respect each other's locks and not process the same file.
**Note:** Logs are stored LOCALLY on each PC in the `logs/` folder to prevent network file contention.
---
## Advanced Options
| Flag | Description |
|------|-------------|
| `--jobs N` | Number of parallel encoders (Default: 2) |
| `--tv-only` | Scan only TV Shows |
| `--content-only` | Scan only Movies |
| `--skip-until "Name"` | Skip files until this keyword is found (good for resuming) |
| `--debug` | Enable verbose logging |
---
## Credits
- Powered by `ab-av1` for VMAF calculation.
- Uses `ffmpeg` for heavy lifting.