// MESSUNG am echten HandBrakeCLI: Encoder-Auskunft und ein kurzer // Probe-Encode an einer echten Roh-MKV. Läuft nur auf Verlangen: // // RIPPY_MESSUNG=1 [RIPPY_MESSUNG_MKV=] \ // npx vitest run test/messung.handbrake.test.ts --reporter=verbose import { existsSync, mkdtempSync, statSync } from 'node:fs' import { tmpdir } from 'node:os' import { join } from 'node:path' import { describe, expect, it } from 'vitest' const messen = process.env.RIPPY_MESSUNG === '1' && process.platform === 'win32' const rohMkv = process.env.RIPPY_MESSUNG_MKV ?? '' describe.skipIf(!messen)('HandBrake am echten System', () => { it('meldet Encoder, Backends und Presets', { timeout: 120_000 }, async () => { const { finden } = await import('../src/kern/werkzeuge/katalog') const { encoderMessen } = await import('../src/kern/komprimieren/encoder') const programm = finden('handbrake') expect(programm.length).toBeGreaterThan(0) const auskunft = await encoderMessen(programm) console.log(`MESSUNG Encoder (${auskunft.encoder.length}): ${auskunft.encoder.join(', ')}`) console.log(`MESSUNG Backends: ${auskunft.backends.join(', ')}`) console.log(`MESSUNG Presets: ${auskunft.presets.length} Stück, z. B. ${auskunft.presets.slice(0, 4).join(' | ')}`) expect(auskunft.encoder.length).toBeGreaterThan(0) expect(auskunft.presets.length).toBeGreaterThan(0) }) it.skipIf(rohMkv.length === 0 || !existsSync(rohMkv))( 'kurzer Probe-Encode an der echten Roh-MKV (5 s Material)', { timeout: 15 * 60_000 }, async () => { const { finden } = await import('../src/kern/werkzeuge/katalog') const { komprimieren } = await import('../src/kern/komprimieren/handbrake') const programm = finden('handbrake') const ziel = join(mkdtempSync(join(tmpdir(), 'rippy-hb-')), 'probe.mkv') const start = Date.now() const ergebnis = await komprimieren({ programm, eingabe: rohMkv, ausgabe: ziel, preset: 'H.265 MKV 1080p30', audioSprachen: ['deu', 'jpn', 'eng'], extraArgs: ['--start-at', 'duration:60', '--stop-at', 'duration:5'], }) const sekunden = ((Date.now() - start) / 1000).toFixed(1) if (ergebnis.status === 'success') { console.log( `MESSUNG Probe-Encode: success in ${sekunden}s → ${ergebnis.ausgabe} (${(statSync(ergebnis.ausgabe).size / 1e6).toFixed(1)} MB)` + (ergebnis.hinweis !== undefined ? ` · Hinweis: ${ergebnis.hinweis}` : ''), ) } else { console.log(`MESSUNG Probe-Encode: ${ergebnis.status} in ${sekunden}s ${'fehler' in ergebnis ? ergebnis.fehler : ''}`) } expect(ergebnis.status).toBe('success') }, ) }) describe.skipIf(messen)('Messung übersprungen', () => { it('läuft nur mit RIPPY_MESSUNG=1 unter Windows', () => { expect(true).toBe(true) }) })