diff --git a/README.md b/README.md index 08bdaf5..d242dda 100644 --- a/README.md +++ b/README.md @@ -219,4 +219,123 @@ py script.py - Wenn Jellyfin in deiner Installation irgendwann auf ein anderes Layout umstellt (mit JSON/Manifest), müsste das Script entsprechend erweitert werden. ---- \ No newline at end of file +--- +--- + +## ffmpeg Hardware-Decode (hw) – Details (Windows vs Linux) + +Wichtig: Das Script nutzt Hardware **nur fürs Decode** (Einlesen/Decodieren des Videos). +Die Ausgabe ist weiterhin **MJPEG** (CPU), was für Trickplay/Thumbs völlig ok ist. + +### Überblick: Welche `hw`-Option wo sinnvoll ist + +- **Windows** + - `d3d11va` ✅ (empfohlen; Intel/AMD/NVIDIA – Decode über Direct3D 11) + - `cuda` ✅ (NVIDIA Decode; meist stabil, braucht NVIDIA-Treiber + ffmpeg mit CUDA-Support) + - `qsv` ✅ (Intel Quick Sync; benötigt Intel iGPU + Treiber; ffmpeg Build muss QSV unterstützen) + - `amf` ⚠️ (AMD AMF ist in ffmpeg primär Windows-Stack; im Script wird fürs Decode intern ebenfalls `d3d11va` genutzt) + - `vaapi` ❌ (VAAPI ist Linux/Unix-Stack) + +- **Linux** + - `vaapi` ✅ (empfohlen für Intel iGPU & AMD GPUs über Mesa VAAPI) + - `qsv` ✅ (Intel Quick Sync; je nach Distribution/ffmpeg Build) + - `cuda` ✅ (NVIDIA; benötigt Treiber + ffmpeg mit CUDA/NVDEC) + - `d3d11va` ❌ (Windows-only) + - `amf` ❌/⚠️ (AMD AMF ist i.d.R. nicht der Linux-Standardpfad; auf Linux nimmst du für AMD fast immer `vaapi`) + +### `hw_device` – wann braucht man das? + +Im Script wird `hw_device` derzeit **nur für `vaapi`** genutzt. + +#### VAAPI (Linux): Device angeben +- Typisch: `hw = vaapi` +- Device: **Render-Node** unter `/dev/dri/` + +Meist ist das: +- `/dev/dri/renderD128` (sehr häufig) +- oder `/dev/dri/renderD129` (wenn mehrere GPUs vorhanden) + +**So findest du die Render Nodes:** +```bash +ls -l /dev/dri/ +``` + +Beispiel output: +- `card0`, `card1` (Display devices) +- `renderD128`, `renderD129` (Render nodes, die wir wollen) + +**Empfehlung:** immer den `renderD*` Node verwenden, nicht `card*`. + +In `settings.ini`: +```ini +[ffmpeg] +hw = vaapi +hw_device = /dev/dri/renderD128 +``` + +#### QSV (Intel Quick Sync): Device meist leer lassen +Im Script wird QSV aktuell so genutzt: +- `-hwaccel qsv` + +In den meisten Fällen brauchst du **kein** `hw_device`. +Wenn du später tiefer optimieren willst (z.B. spezielles QSV device), müsste man das Script erweitern. + +In `settings.ini`: +```ini +[ffmpeg] +hw = qsv +hw_device = +``` + +#### CUDA (NVIDIA): Device leer lassen +CUDA/NVDEC benötigt typischerweise kein Device-Argument (Treiber entscheidet). + +```ini +[ffmpeg] +hw = cuda +hw_device = +``` + +#### D3D11VA (Windows): Device leer lassen +Direct3D 11 VA ist ein Windows-API; Device-Auswahl erfolgt automatisch. + +```ini +[ffmpeg] +hw = d3d11va +hw_device = +``` + +--- + +## Troubleshooting Hardware-Decode + +### 1) Erst testen, ob ffmpeg den hwaccel kennt +```bash +ffmpeg -hide_banner -hwaccels +``` +Da sollte z.B. `vaapi`, `qsv`, `cuda`, `d3d11va` auftauchen. + +### 2) Linux VAAPI: Treiber/Stack +- Intel: `intel-media-driver` (neuere Gen) oder `i965-va-driver` (älter) +- AMD: Mesa VAAPI (`mesa-va-drivers`) + +Test: +```bash +vainfo +``` +Wenn `vainfo` schon Fehler wirft, wird ffmpeg mit `vaapi` auch zicken. + +### 3) NVIDIA CUDA/NVDEC +Wenn `ffmpeg -hwaccels` kein `cuda` zeigt, ist dein ffmpeg-Build evtl. ohne CUDA. + +### 4) Wenn’s instabil ist +Setze erst mal: +```ini +[ffmpeg] +hw = none +``` +und prüfe, ob alles stabil durchläuft. Danach wieder mit `hw` testen. + +### 5) Mehrere GPUs +- Linux: VAAPI über `renderD128`/`renderD129` zielst du die GPU indirekt an. +- Windows: D3D11VA/CUDA/QSV nutzen i.d.R. automatisch die passende Hardware; explizite Auswahl wäre möglich, ist aber derzeit im Script nicht vorgesehen. \ No newline at end of file