// MESSUNG an einer ECHTEN Roh-Datei: Welche Ton- und Untertitelspuren hat // MakeMKV wirklich in die MKV geschrieben? (5.4.0, Regel D) // // RIPPY_MESSUNG_MKV="E:\Rippy\roh\bluray-…\title_t00.mkv" npx vitest run test/messung.spuren.test.ts --reporter=verbose // // Der Anlass: Der Auswahl-Dialog zeigt die Sprachen, die der Info-Lauf an // der DISC gemessen hat. Ob sie alle in der Datei landen, entscheidet // MakeMKVs Auswahlregel (werkzeuge/spurauswahl.ts). Diese Messung fragt die // Datei selbst — über denselben HandBrake-Scan, den die Kompression benutzt // (komprimieren/scan.ts). Läuft nur auf Verlangen und nur unter Windows. import { describe, expect, it } from 'vitest' const datei = process.env.RIPPY_MESSUNG_MKV ?? '' const messen = datei.length > 0 && process.platform === 'win32' describe.skipIf(!messen)('Spuren einer echten Roh-Datei', () => { it('HandBrake-Scan liefert Ton- und Untertitelspuren mit Sprachcode', { timeout: 180_000 }, async () => { const { finden } = await import('../src/kern/werkzeuge/katalog') const { spurenScannen } = await import('../src/kern/komprimieren/scan') const handbrake = finden('handbrake', '') expect(handbrake.length, 'HandBrakeCLI nicht gefunden').toBeGreaterThan(0) const start = Date.now() const spuren = await spurenScannen(handbrake, datei) console.log(`MESSUNG Scan: ${((Date.now() - start) / 1000).toFixed(1)} s — ${datei}`) expect(spuren, 'Scan lieferte nichts').not.toBeNull() console.log(`MESSUNG Dauer: ${Math.round(spuren!.dauerS / 60)} min`) for (const a of spuren!.audio) console.log(`MESSUNG Ton ${a.nr}: ${a.lang} — ${a.beschreibung}`) for (const u of spuren!.untertitel) console.log(`MESSUNG Untertitel ${u.nr}: ${u.lang} — ${u.beschreibung}`) expect(spuren!.audio.length).toBeGreaterThan(0) }) })