import { FFmpeg } from '@ffmpeg/ffmpeg'; import { toBlobURL } from '@ffmpeg/util'; let ffmpeg: FFmpeg | null = null; export async function convertWebmToMp3(webmUrl: string): Promise<{ url: string; blob: Blob }> { if (!ffmpeg) { ffmpeg = new FFmpeg(); const baseURL = 'https://unpkg.com/@ffmpeg/core@0.12.4/dist/umd'; await ffmpeg.load({ coreURL: await toBlobURL(`${baseURL}/ffmpeg-core.js`, 'text/javascript'), wasmURL: await toBlobURL(`${baseURL}/ffmpeg-core.wasm`, 'application/wasm'), }); } try { // Baixar o arquivo WebM const webmResponse = await fetch(webmUrl); const webmBlob = await webmResponse.blob(); const webmBuffer = await webmBlob.arrayBuffer(); // Escrever o arquivo de entrada no sistema de arquivos virtual do FFmpeg await ffmpeg.writeFile('input.webm', new Uint8Array(webmBuffer)); // Executar a conversão await ffmpeg.exec(['-i', 'input.webm', '-acodec', 'libmp3lame', '-ab', '128k', 'output.mp3']); // Ler o arquivo convertido const mp3Data = await ffmpeg.readFile('output.mp3'); const mp3Blob = new Blob([mp3Data], { type: 'audio/mp3' }); const mp3Url = URL.createObjectURL(mp3Blob); // Limpar arquivos do sistema de arquivos virtual await ffmpeg.deleteFile('input.webm'); await ffmpeg.deleteFile('output.mp3'); return { url: mp3Url, blob: mp3Blob }; } catch (error) { console.error('Erro na conversão do áudio:', error); throw error; } }