mirror of
https://github.com/lucasrcsantana/story-generator.git
synced 2025-12-17 13:57:51 +00:00
- Remove lógica redundante de URL pública - Usa diretamente audio_url do banco - Mantém configuração original do Supabase client - Melhora tratamento de erros na reprodução
42 lines
1.4 KiB
TypeScript
42 lines
1.4 KiB
TypeScript
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;
|
|
}
|
|
}
|