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:
parent
0a2372cb5c
commit
178f11872e
2 changed files with 167 additions and 37 deletions
96
CHANGELOG.md
96
CHANGELOG.md
|
|
@ -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
108
README.md
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue