Doku aktualisiert: v2.4.0 + v2.5.0 Changelog, README mit Unraid-Anleitung

- CHANGELOG: v2.4.0 (Player, Import-Zuordnung, ENV-Refactoring, Audio-Fix)
- CHANGELOG: v2.5.0 (GPU-Fix, Entrypoint, Unraid-Template, AV1 10-Bit)
- README: Unraid-Installationsanleitung, VK_* ENV-Tabelle, GPU-Erkennung
- README: Video-Player Feature, Streaming-API, neue Import-Endpoints

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Eduard Wisch 2026-02-24 18:53:57 +01:00
parent 0a2372cb5c
commit 178f11872e
2 changed files with 167 additions and 37 deletions

View file

@ -2,6 +2,102 @@
Alle relevanten Aenderungen am VideoKonverter-Projekt. Alle relevanten Aenderungen am VideoKonverter-Projekt.
## [2.5.0] - 2026-02-24
### GPU & Deployment
**Intel A380 GPU-Konfiguration**
- GPU-Device auf renderD129 (Intel A380) korrigiert - renderD128 war AMD auf Eddys Unraid
- GPU-Erkennung per `/sys/class/drm/renderD*/device/uevent` statt `vainfo`
- `VK_GPU_DEVICE` Umgebungsvariable statt hardcoded Device-Mapping
- AV1 10-Bit (`gpu_av1_10bit`) als Standard-Preset (bessere Qualitaet bei gleichem Speed)
**Docker Entrypoint**
- Neues `entrypoint.sh`: Kopiert Default-Configs (`presets.yaml`, `settings.yaml`) automatisch ins gemountete cfg-Volume bei Erstinstallation
- `cfg_defaults/` Verzeichnis im Image als Backup der Default-Konfigdateien
- `Config._load_presets()` mit Fallback auf `cfg_defaults` falls presets.yaml fehlt
- Behebt leeres Preset-Dropdown auf Unraid bei frisch gemounteten Volumes
**Unraid Docker-Template**
- Neue `unraid/my-VideoKonverter.xml` fuer Unraid WebGUI-Installation
- Alle ENV-Variablen mit Defaults vorkonfiguriert
- GPU-Device, Pfad-Mappings, DB-Konfiguration voreingestellt
- ExtraParams fuer `--group-add video --device=/dev/dri:/dev/dri`
**Startseite**
- Redirect von `/` auf `/library` statt Dashboard
### Geaenderte Dateien
- `Dockerfile` - cfg_defaults Sicherung, entrypoint.sh statt CMD
- `entrypoint.sh` - NEU: Default-Config-Kopie bei Erststart
- `docker-compose.yml` - VK_GPU_DEVICE renderD129, /dev/dri komplett, gpu_av1_10bit Default
- `app/config.py` - _load_presets() mit cfg_defaults Fallback
- `app/routes/pages.py` - Startseite Redirect auf /library
- `unraid/my-VideoKonverter.xml` - NEU: Unraid Docker-Template
---
## [2.4.0] - 2026-02-24
### Video-Player & Streaming
**Browser-Streaming**
- Video-Player mit ffmpeg-Transcoding-Stream (Video copy + Audio->AAC Stereo)
- Unterstuetzt Formate die Browser nicht nativ abspielen (EAC3, DTS, AC3, TrueHD)
- Fragmented MP4 mit `frag_keyframe+empty_moov+faststart`, chunked Transfer-Encoding
- Endpoint: `GET /api/library/videos/{id}/stream?t=0`
**Play-/Delete-Buttons**
- Play-Button bei jedem Video in Serien-, Film- und Ordner-Ansichten
- Delete-Button zum Loeschen einzelner Videos (DB-Eintrag + Datei auf Disk)
- Bestaetigungs-Dialog vor dem Loeschen
### Import-System
**Nicht-erkannte Dateien zuordnen**
- Modal fuer nicht-erkannte Dateien: Serie/Staffel/Episode manuell zuweisen oder ueberspringen
- Import-Start blockiert solange ungeloeste Items vorhanden
- Duplikat-Erkennung bei erneutem Scan nach Import
### Technische Aenderungen
**ENV-Variablen Refactoring**
- Alle Umgebungsvariablen mit `VK_*` Prefix (VK_DB_HOST, VK_MODE, VK_PORT etc.)
- `_ENV_MAP` in config.py: Zentrales Mapping ENV -> Settings-Pfad mit Typ-Konvertierung
- Rueckwaertskompatibilitaet per `_ENV_ALIASES`
**WebSocket Server-Log Push**
- Server-Logs werden per WebSocket an alle Clients gepusht (statt HTTP-Polling)
- `WebLogHandler` in api.py schreibt Log-Eintraege in den WebSocket-Manager
**Audio-Fix**
- `channelmap=channel_layout=5.1` Filter fuer libopus bei EAC3/AC3 mit `5.1(side)` Layout
- Behebt Encoder-Fehler bei Surround-Audio-Transcoding
**Ordner-Loeschen Fix**
- Filebrowser: Ordner-Loeschen funktioniert jetzt korrekt
### Geaenderte Dateien
- `app/config.py` - ENV-Mapping, VK_* Prefix, Typ-Konvertierung (+180 Z.)
- `app/routes/library_api.py` - Video-Stream, Video-Delete, Import-Zuordnung (+200 Z.)
- `app/services/importer.py` - Zuordnungs-Modal, Duplikat-Erkennung (+160 Z.)
- `app/services/encoder.py` - channelmap 5.1(side) Fix
- `app/services/library.py` - Video-Delete, Rescan-Logik (+70 Z.)
- `app/static/js/library.js` - Player, Play/Delete-Buttons, Import-Modal (+270 Z.)
- `app/static/css/style.css` - Player-Styles, Button-Styles (+50 Z.)
- `app/templates/library.html` - Player-Modal, Import-Zuordnungs-Modal (+60 Z.)
- `app/templates/base.html` - WebSocket-Log-Push Integration
- `app/routes/ws.py` - Server-Log WebSocket-Broadcast
- `docker-compose.yml` - VK_* ENV-Variablen
### Neue API-Endpoints
- `GET /api/library/videos/{id}/stream` - Video-Transcoding-Stream
- `DELETE /api/library/videos/{id}` - Video loeschen (DB + Datei)
- `POST /api/library/import/{id}/assign` - Import-Item manuell zuordnen
- `POST /api/library/import/{id}/skip` - Import-Item ueberspringen
---
## [2.3.0] - 2026-02-24 ## [2.3.0] - 2026-02-24
### Import-System Verbesserungen ### Import-System Verbesserungen

108
README.md
View file

@ -5,14 +5,20 @@ Web-basierter Video-Konverter mit GPU-Beschleunigung (Intel VAAPI), Video-Biblio
## Features ## Features
### Video-Konvertierung ### Video-Konvertierung
- **GPU-Encoding**: Intel VAAPI (AV1, HEVC, H.264) ueber Intel A380 - **GPU-Encoding**: Intel VAAPI (AV1, AV1 10-Bit, HEVC, H.264) ueber Intel A380
- **CPU-Encoding**: SVT-AV1, x265, x264 als Fallback - **CPU-Encoding**: SVT-AV1, x265, x264 als Fallback
- **Konfigurierbare Presets**: GPU/CPU, verschiedene Codecs und Qualitaetsstufen - **AV1 10-Bit Standard**: Bessere Qualitaet bei gleichem Speed (p010 Pixel-Format)
- **Konfigurierbare Presets**: 7 Presets (4x GPU + 3x CPU)
- **Parallele Jobs**: Mehrere Videos gleichzeitig konvertieren - **Parallele Jobs**: Mehrere Videos gleichzeitig konvertieren
- **Audio-Handling**: Alle Spuren behalten (DE+EN), kein Downmix, Opus-Transcoding - **Audio-Handling**: Alle Spuren behalten (DE+EN), kein Downmix, Opus-Transcoding
- **Live-Fortschritt**: WebSocket-basierte Echtzeit-Updates im Dashboard - **Live-Fortschritt**: WebSocket-basierte Echtzeit-Updates im Dashboard
- **Queue-Management**: Drag-and-Drop, Pause, Abbruch, Prioritaeten - **Queue-Management**: Drag-and-Drop, Pause, Abbruch, Prioritaeten
### Video-Player
- **Browser-Streaming**: Direktes Abspielen mit ffmpeg-Transcoding (EAC3/DTS/AC3 -> AAC)
- **Play-Buttons**: In Serien-, Film- und Ordner-Ansichten
- **Delete-Buttons**: Einzelne Videos loeschen (DB + Datei)
### Video-Bibliothek ### Video-Bibliothek
- **Ordner-Scan**: Konfigurierbare Scan-Pfade fuer Serien und Filme - **Ordner-Scan**: Konfigurierbare Scan-Pfade fuer Serien und Filme
- **Serien-Erkennung**: Automatisch via Ordnerstruktur (`S01E01`, `1x02`, `Staffel/Season XX`) - **Serien-Erkennung**: Automatisch via Ordnerstruktur (`S01E01`, `1x02`, `Staffel/Season XX`)
@ -80,8 +86,11 @@ Web-basierter Video-Konverter mit GPU-Beschleunigung (Intel VAAPI), Video-Biblio
video-konverter/ video-konverter/
├── __main__.py # Einstiegspunkt ├── __main__.py # Einstiegspunkt
├── Dockerfile # Ubuntu 24.04 + ffmpeg + Intel GPU ├── Dockerfile # Ubuntu 24.04 + ffmpeg + Intel GPU
├── entrypoint.sh # Default-Configs in Volumes kopieren
├── docker-compose.yml # GPU + CPU Profile ├── docker-compose.yml # GPU + CPU Profile
├── requirements.txt # Python-Abhaengigkeiten ├── requirements.txt # Python-Abhaengigkeiten
├── unraid/
│ └── my-VideoKonverter.xml # Unraid Docker-Template
├── app/ ├── app/
│ ├── server.py # Haupt-Server (aiohttp Application) │ ├── server.py # Haupt-Server (aiohttp Application)
│ ├── config.py # Settings + Presets laden │ ├── config.py # Settings + Presets laden
@ -131,7 +140,7 @@ video-konverter/
### Voraussetzungen ### Voraussetzungen
- Docker + Docker Compose - Docker + Docker Compose
- MariaDB-Server (extern, z.B. auf Unraid) - MariaDB-Server (extern, z.B. auf Unraid)
- Optional: Intel GPU fuer Hardware-Encoding - Optional: Intel GPU fuer Hardware-Encoding (Intel A380 empfohlen)
### MariaDB einrichten ### MariaDB einrichten
```sql ```sql
@ -142,37 +151,53 @@ FLUSH PRIVILEGES;
``` ```
Die Tabellen werden automatisch beim ersten Start erstellt. Die Tabellen werden automatisch beim ersten Start erstellt.
### Konfiguration ### Unraid-Installation
In `app/cfg/settings.yaml` anpassen:
```yaml
database:
host: "192.168.155.11"
port: 3306
user: "video"
password: "dein_passwort"
database: "video_converter"
encoding: 1. Docker-Image laden (Unraid Web-Terminal):
mode: "cpu" # "gpu" | "cpu" | "auto" ```bash
gpu_device: "/dev/dri/renderD128" docker load -i /mnt/user/downloads/videokonverter-cpu.tar
default_preset: "cpu_av1"
max_parallel_jobs: 1
files:
target_container: "webm" # "webm" | "mkv" | "mp4"
delete_source: false
recursive_scan: true
library:
enabled: true
tvdb_api_key: "" # Von thetvdb.com
tvdb_pin: "" # Subscriber PIN (optional)
tvdb_language: "deu" # deu, eng, fra, spa, ita, jpn
import_default_mode: "copy" # "copy" | "move"
import_naming_pattern: "{series} - S{season:02d}E{episode:02d} - {title}.{ext}"
import_season_pattern: "Season {season:02d}"
``` ```
2. XML-Template kopieren:
```bash
cp /mnt/user/downloads/my-VideoKonverter.xml /boot/config/plugins/dockerMan/templates-user/
```
3. In der Unraid Docker-WebGUI: "Container hinzufuegen" → Template waehlen → Werte anpassen → Starten
Das Template enthält alle Variablen mit korrekten Defaults.
### Konfiguration
Alle Einstellungen sind per **Umgebungsvariablen** (VK_*) konfigurierbar.
ENV-Variablen ueberschreiben immer die `settings.yaml`.
| Variable | Default | Beschreibung |
|----------|---------|-------------|
| `VK_DB_HOST` | `192.168.155.11` | MariaDB Host |
| `VK_DB_PORT` | `3306` | MariaDB Port |
| `VK_DB_USER` | `video` | MariaDB Benutzer |
| `VK_DB_PASSWORD` | - | MariaDB Passwort |
| `VK_DB_NAME` | `video_converter` | Datenbank-Name |
| `VK_MODE` | `cpu` | Encoding-Modus: `gpu`, `cpu`, `auto` |
| `VK_GPU_DEVICE` | `/dev/dri/renderD129` | GPU Render-Device |
| `VK_DEFAULT_PRESET` | `gpu_av1_10bit` | Standard Encoding-Preset |
| `VK_MAX_JOBS` | `1` | Max. parallele Jobs |
| `VK_TVDB_API_KEY` | - | TVDB API Key |
| `VK_TVDB_LANGUAGE` | `deu` | TVDB Sprache |
| `VK_LOG_LEVEL` | `INFO` | Log-Level |
Alternativ kann `app/cfg/settings.yaml` direkt bearbeitet werden.
Bei Erstinstallation werden Default-Konfigdateien automatisch ins cfg-Volume kopiert.
### GPU-Device ermitteln
Auf dem Host pruefen welches renderD* die Intel GPU ist:
```bash
cat /sys/class/drm/renderD*/device/uevent | grep -B1 DRIVER
```
Beispiel: `renderD128` = AMD, `renderD129` = Intel → `VK_GPU_DEVICE=/dev/dri/renderD129`
### Starten ### Starten
**GPU-Modus** (Produktion auf Unraid): **GPU-Modus** (Produktion auf Unraid):
@ -240,6 +265,12 @@ Web-UI: http://localhost:8080
| GET | `/api/tvdb/language` | TVDB-Sprache lesen | | GET | `/api/tvdb/language` | TVDB-Sprache lesen |
| PUT | `/api/tvdb/language` | TVDB-Sprache aendern | | PUT | `/api/tvdb/language` | TVDB-Sprache aendern |
### Streaming
| Methode | Pfad | Beschreibung |
|---------|------|-------------|
| GET | `/api/library/videos/{id}/stream` | Video-Transcoding-Stream (ffmpeg pipe) |
| DELETE | `/api/library/videos/{id}` | Video loeschen (DB + Datei) |
### Import ### Import
| Methode | Pfad | Beschreibung | | Methode | Pfad | Beschreibung |
|---------|------|-------------| |---------|------|-------------|
@ -248,6 +279,8 @@ Web-UI: http://localhost:8080
| GET | `/api/library/import/{id}` | Import-Job Status mit Items | | GET | `/api/library/import/{id}` | Import-Job Status mit Items |
| POST | `/api/library/import/{id}/analyze` | Import analysieren | | POST | `/api/library/import/{id}/analyze` | Import analysieren |
| POST | `/api/library/import/{id}/execute` | Import ausfuehren | | POST | `/api/library/import/{id}/execute` | Import ausfuehren |
| POST | `/api/library/import/{id}/assign` | Item manuell zuordnen |
| POST | `/api/library/import/{id}/skip` | Item ueberspringen |
### System ### System
| Methode | Pfad | Beschreibung | | Methode | Pfad | Beschreibung |
@ -294,12 +327,13 @@ Zwischenspeicher fuer TVDB-Episodendaten (Serie, Staffel, Episode, Name, Ausstra
## Docker Volumes ## Docker Volumes
| Volume | Container-Pfad | Beschreibung | | Volume (Host) | Container-Pfad | Beschreibung |
|--------|---------------|-------------| |----------------|---------------|-------------|
| `./app/cfg` | `/opt/video-konverter/app/cfg` | Konfiguration (persistent) | | `./app/cfg` (lokal) / `/mnt/user/appdata/videokonverter/cfg` (Unraid) | `/opt/video-konverter/app/cfg` | Konfiguration (persistent, Defaults werden automatisch kopiert) |
| `./data` | `/opt/video-konverter/data` | Queue-Persistierung | | `./data` (lokal) / `/mnt/user/appdata/videokonverter/data` (Unraid) | `/opt/video-konverter/data` | Queue-Persistierung |
| `./logs` | `/opt/video-konverter/logs` | Server-Logs | | `./logs` (lokal) / `/mnt/user/appdata/videokonverter/logs` (Unraid) | `/opt/video-konverter/logs` | Server-Logs |
| `/mnt` | `/mnt` | Medien-Pfade (1:1 durchgereicht) | | `/mnt` (lokal) / `/mnt/user` (Unraid) | `/mnt` | Medien-Pfade |
| `/dev/dri` | `/dev/dri` | GPU-Devices (fuer VAAPI) |
## Lizenz ## Lizenz