feat(v5): 4K-UHD nach der Leistung — Grafikkarte mit 4K-Preset komprimiert, nur CPU bleibt verlustfrei

WAS: presetEmpfehlung liefert für UHD das 4K-Preset der gemessenen
Grafikkarten-Familie (VCN/NVENC/QSV) — sonst PRESET_KEINE (verlustfrei);
komprimierenFuer folgt der Empfehlung, wenn der Typ auf „automatisch"
steht. Eigene Wahl schlägt beides. Fenster: Kachel, Kompressions-Karte und
Erst-Einrichtung sagen „(8 Bit)" bzw. „verlustfrei — nur CPU-Encoder".
Gemessen am 12.09.2026 (HandBrake 1.11.2, RX 9070 XT, Akira-UHD-Abbild):
die 4K-Hardware-Presets sind 8-Bit (vce_h265, Profil main); der 10-Bit-
HEVC-Encoder vce_h265_10bit stürzt beim Start ab (Segfault, mit Profil
auto und main10); AV1 10-Bit („AV1 VCN 2160p 4K", vce_av1_10bit) läuft
— steht als eigene Wahl in der Liste, mit dem Hinweis auf AV1-fähige
Abspielgeräte.
WARUM: Durchsicht 12.09.2026, A4 — Commander-Entscheid: „Rippy analysiert
doch die Performance des PCs, könnten wir das nicht davon abhängig
machen?" Vorher rechnete der CPU-Default 4K auf 1080p klein, tagelang.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Hitonabi
2026-09-12 21:48:38 +02:00
co-authored by Claude Opus 5
parent 6b6e5c3436
commit 0fc87aa022
7 changed files with 96 additions and 21 deletions
+47
View File
@@ -0,0 +1,47 @@
// 5.7.0 — 4K nach der Leistung (Commander-Entscheid 12.09.2026): Grafik-
// karten-Encoder plus 4K-Preset → komprimieren; nur CPU → verlustfrei.
// Preset-Namen und Encoder am mitgelieferten HandBrake 1.11.2 gemessen
// (--preset-list, --help; vce_h265_10bit stürzt ab, AV1 10-Bit läuft).
import { describe, expect, it } from 'vitest'
import { DEFAULT_HB_PRESET, PRESET_KEINE, empfehlungText, presetEmpfehlung } from '../src/gemeinsam/preset-empfehlung'
import { komprimierenFuer, presetFuer } from '../src/kern/komprimieren/presets'
const PRESETS = ['H.265 MKV 1080p30', 'H.265 MKV 2160p60 4K', 'AV1 VCN 2160p 4K', 'H.265 VCN 2160p 4K', 'H.265 VCN 1080p', 'H.265 NVENC 1080p']
const NUR_CPU = ['cpu-x264', 'cpu-x265', 'cpu-av1']
const AMD = [...NUR_CPU, 'vce', 'vce-av1']
const NVIDIA_OHNE_4K = [...NUR_CPU, 'nvenc']
describe('presetEmpfehlung für 4K-UHD', () => {
it('Grafikkarte mit 4K-Preset → das 4K-Preset (8 Bit im Klartext)', () => {
expect(presetEmpfehlung('uhd', AMD, PRESETS)).toBe('H.265 VCN 2160p 4K')
expect(empfehlungText('uhd', 'H.265 VCN 2160p 4K')).toBe('H.265 VCN 2160p 4K (8 Bit)')
})
it('nur CPU → verlustfrei lassen, nie das 1080p-CPU-Preset', () => {
expect(presetEmpfehlung('uhd', NUR_CPU, PRESETS)).toBe(PRESET_KEINE)
expect(empfehlungText('uhd', PRESET_KEINE)).toContain('verlustfrei')
})
it('Grafikkarte ohne 4K-Preset → verlustfrei, nicht klein rechnen', () => {
expect(presetEmpfehlung('uhd', NVIDIA_OHNE_4K, PRESETS)).toBe(PRESET_KEINE)
})
it('DVD und Blu-ray wie bisher: Grafikkarte, sonst CPU-Default', () => {
expect(presetEmpfehlung('bluray', AMD, PRESETS)).toBe('H.265 VCN 1080p')
expect(presetEmpfehlung('dvd', NUR_CPU, PRESETS)).toBe(DEFAULT_HB_PRESET)
expect(presetEmpfehlung('bluray', NVIDIA_OHNE_4K, PRESETS)).toBe('H.265 NVENC 1080p')
})
})
describe('komprimierenFuer mit Empfehlung', () => {
it('automatisch + Empfehlung „keine" → nicht komprimieren', () => {
expect(komprimierenFuer('uhd', {}, PRESET_KEINE)).toBe(false)
expect(komprimierenFuer('uhd', { transcodePresetUhd: '' }, PRESET_KEINE)).toBe(false)
})
it('eigene Wahl schlägt die Empfehlung — in beide Richtungen', () => {
expect(komprimierenFuer('uhd', { transcodePresetUhd: 'AV1 VCN 2160p 4K' }, PRESET_KEINE)).toBe(true)
expect(komprimierenFuer('uhd', { transcodePresetUhd: PRESET_KEINE }, 'H.265 VCN 2160p 4K')).toBe(false)
expect(presetFuer('uhd', { transcodePresetUhd: 'AV1 VCN 2160p 4K' }, PRESET_KEINE)).toBe('AV1 VCN 2160p 4K')
})
it('Blu-ray bleibt unberührt', () => {
expect(komprimierenFuer('bluray', {}, 'H.265 VCN 1080p')).toBe(true)
expect(komprimierenFuer('bluray', {}, '')).toBe(true)
})
})