From 178f11872eca8adfe119db4227a4f372b13e8cf5 Mon Sep 17 00:00:00 2001 From: data Date: Tue, 24 Feb 2026 18:53:57 +0100 Subject: [PATCH] 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 --- CHANGELOG.md | 96 +++++++++++++++++++++++++++++++++++++++++++++ README.md | 108 +++++++++++++++++++++++++++++++++------------------ 2 files changed, 167 insertions(+), 37 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f547001..a4e4c30 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,102 @@ 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 ### Import-System Verbesserungen diff --git a/README.md b/README.md index 3a78478..e9a0957 100644 --- a/README.md +++ b/README.md @@ -5,14 +5,20 @@ Web-basierter Video-Konverter mit GPU-Beschleunigung (Intel VAAPI), Video-Biblio ## Features ### 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 -- **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 - **Audio-Handling**: Alle Spuren behalten (DE+EN), kein Downmix, Opus-Transcoding - **Live-Fortschritt**: WebSocket-basierte Echtzeit-Updates im Dashboard - **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 - **Ordner-Scan**: Konfigurierbare Scan-Pfade fuer Serien und Filme - **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/ ├── __main__.py # Einstiegspunkt ├── Dockerfile # Ubuntu 24.04 + ffmpeg + Intel GPU +├── entrypoint.sh # Default-Configs in Volumes kopieren ├── docker-compose.yml # GPU + CPU Profile ├── requirements.txt # Python-Abhaengigkeiten +├── unraid/ +│ └── my-VideoKonverter.xml # Unraid Docker-Template ├── app/ │ ├── server.py # Haupt-Server (aiohttp Application) │ ├── config.py # Settings + Presets laden @@ -131,7 +140,7 @@ video-konverter/ ### Voraussetzungen - Docker + Docker Compose - MariaDB-Server (extern, z.B. auf Unraid) -- Optional: Intel GPU fuer Hardware-Encoding +- Optional: Intel GPU fuer Hardware-Encoding (Intel A380 empfohlen) ### MariaDB einrichten ```sql @@ -142,37 +151,53 @@ FLUSH PRIVILEGES; ``` Die Tabellen werden automatisch beim ersten Start erstellt. -### Konfiguration -In `app/cfg/settings.yaml` anpassen: -```yaml -database: - host: "192.168.155.11" - port: 3306 - user: "video" - password: "dein_passwort" - database: "video_converter" +### Unraid-Installation -encoding: - mode: "cpu" # "gpu" | "cpu" | "auto" - gpu_device: "/dev/dri/renderD128" - 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}" +1. Docker-Image laden (Unraid Web-Terminal): +```bash +docker load -i /mnt/user/downloads/videokonverter-cpu.tar ``` +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 **GPU-Modus** (Produktion auf Unraid): @@ -240,6 +265,12 @@ Web-UI: http://localhost:8080 | GET | `/api/tvdb/language` | TVDB-Sprache lesen | | 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 | Methode | Pfad | Beschreibung | |---------|------|-------------| @@ -248,6 +279,8 @@ Web-UI: http://localhost:8080 | GET | `/api/library/import/{id}` | Import-Job Status mit Items | | POST | `/api/library/import/{id}/analyze` | Import analysieren | | 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 | Methode | Pfad | Beschreibung | @@ -294,12 +327,13 @@ Zwischenspeicher fuer TVDB-Episodendaten (Serie, Staffel, Episode, Name, Ausstra ## Docker Volumes -| Volume | Container-Pfad | Beschreibung | -|--------|---------------|-------------| -| `./app/cfg` | `/opt/video-konverter/app/cfg` | Konfiguration (persistent) | -| `./data` | `/opt/video-konverter/data` | Queue-Persistierung | -| `./logs` | `/opt/video-konverter/logs` | Server-Logs | -| `/mnt` | `/mnt` | Medien-Pfade (1:1 durchgereicht) | +| Volume (Host) | Container-Pfad | Beschreibung | +|----------------|---------------|-------------| +| `./app/cfg` (lokal) / `/mnt/user/appdata/videokonverter/cfg` (Unraid) | `/opt/video-konverter/app/cfg` | Konfiguration (persistent, Defaults werden automatisch kopiert) | +| `./data` (lokal) / `/mnt/user/appdata/videokonverter/data` (Unraid) | `/opt/video-konverter/data` | Queue-Persistierung | +| `./logs` (lokal) / `/mnt/user/appdata/videokonverter/logs` (Unraid) | `/opt/video-konverter/logs` | Server-Logs | +| `/mnt` (lokal) / `/mnt/user` (Unraid) | `/mnt` | Medien-Pfade | +| `/dev/dri` | `/dev/dri` | GPU-Devices (fuer VAAPI) | ## Lizenz