// MESSUNG an echter Hardware: makemkvcon finden und die eingelegte Disc // befragen (Titel + Sprachen). Läuft nur auf Verlangen: // // RIPPY_MESSUNG=1 npx vitest run test/messung.makemkv.test.ts // // Der VOLLE Rip ist ein eigener Lauf (messung.rip.test.ts) — er dauert // je Disc 30–90 Minuten. import { describe, expect, it } from 'vitest' const messen = process.env.RIPPY_MESSUNG === '1' && process.platform === 'win32' describe.skipIf(!messen)('makemkvcon am echten System', () => { it('wird über den Katalog gefunden', async () => { const { finden } = await import('../src/kern/werkzeuge/katalog') const pfad = finden('makemkv') console.log(`MESSUNG makemkvcon: ${pfad.length > 0 ? pfad : 'NICHT GEFUNDEN'}`) const handbrake = finden('handbrake') console.log(`MESSUNG HandBrakeCLI: ${handbrake.length > 0 ? handbrake : 'NICHT GEFUNDEN'}`) const flac = finden('flac') console.log(`MESSUNG flac: ${flac.length > 0 ? flac : 'NICHT GEFUNDEN'}`) expect(pfad.length).toBeGreaterThan(0) }) it('liest Titel und Sprachen der eingelegten Disc', { timeout: 360_000 }, async () => { const { finden } = await import('../src/kern/werkzeuge/katalog') const { titelInfoLesen } = await import('../src/kern/rip/makemkv') const { win32Api } = await import('../src/kern/laufwerk/win32') const { listOptischeLaufwerke } = await import('../src/kern/laufwerk/disc') const programm = finden('makemkv') expect(programm.length).toBeGreaterThan(0) const geraete = listOptischeLaufwerke(win32Api()) expect(geraete.length).toBeGreaterThan(0) const info = await titelInfoLesen(programm, geraete[0]) console.log(`MESSUNG Titel: ${info.titel.length}`) for (const t of info.titel.slice(0, 12)) { console.log( `MESSUNG #${t.nr}: ${Math.floor(t.dauerS / 60)}min ${t.dauerS % 60}s · ` + `${(t.groesseBytes / 1e9).toFixed(2)} GB · ${t.kapitel} Kapitel`, ) } console.log( `MESSUNG Sprachen Ton: ${info.sprachen.audio.map((s) => `${s.lang}(${s.spuren})`).join(', ') || '—'}`, ) console.log( `MESSUNG Sprachen Untertitel: ${info.sprachen.untertitel.map((s) => `${s.lang}(${s.spuren})`).join(', ') || '—'}`, ) expect(info.titel.length).toBeGreaterThan(0) }) }) describe.skipIf(messen)('Messung übersprungen', () => { it('läuft nur mit RIPPY_MESSUNG=1 unter Windows', () => { expect(true).toBe(true) }) })