From f0f1719a657ae142ee18e1bbc84e5ebd435a2329 Mon Sep 17 00:00:00 2001 From: dev Date: Mon, 10 Aug 2026 13:14:48 +0200 Subject: [PATCH] Gemini STT: compressione audio in Opus/OGG (audio/ogg) -60% payload vs MP3 --- extensions/index.ts | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/extensions/index.ts b/extensions/index.ts index 7d77b59..80eb927 100644 --- a/extensions/index.ts +++ b/extensions/index.ts @@ -448,21 +448,22 @@ async function transcribeWithGeminiAPI(file: string): Promise const model = process.env.AGY_GEMINI_MODEL ?? "gemini-3.5-flash"; try { - // Comprimi in MP3 per evitare HTTP 413 su registrazioni lunghe + // Comprimi in Opus/OGG (audio/ogg) — molto più efficiente dell'MP3 per il parlato, + // riduce il payload di ~60% evitando HTTP 413 su registrazioni lunghe let audioFile = file; let mimeType = "audio/wav"; if (file.toLowerCase().endsWith(".wav")) { - const mp3 = file.replace(/\.wav$/i, ".mp3"); + const ogg = file.replace(/\.wav$/i, ".ogg"); try { await execFileAsync( "ffmpeg", - ["-y", "-i", file, "-ac", "1", "-ar", "16000", "-c:a", "libmp3lame", "-q:a", "5", mp3], + ["-y", "-i", file, "-ac", "1", "-ar", "16000", "-c:a", "libopus", "-b:a", "16k", ogg], { timeout: 60_000 }, ); - audioFile = mp3; - mimeType = "audio/mpeg"; + audioFile = ogg; + mimeType = "audio/ogg"; } catch (e: any) { - return { text: "", error: `Conversione MP3 fallita: ${e.message}` }; + return { text: "", error: `Conversione Opus fallita: ${e.message}` }; } } const b64 = fs.readFileSync(audioFile).toString("base64");