Comprimir audio a MP3 en la web: guía para programadores
Si desarrollas aplicaciones web con subida de audio, tarde o temprano necesitarás un flujo para convertir y comprimir a MP3 con buen equilibrio entre tamaño y calidad. En esta guía verás cuándo usar FFmpeg en servidor, cuándo optar por ffmpeg.wasm en el navegador, y qué presets y bitrates funcionan mejor para voz y música, especialmente en audios que llegan desde WhatsApp o Telegram.
🎯 ¿Solo quieres hacerlo ya mismo?
Gratis • Online • Funciona en móvil y ordenador
Arquitecturas: cliente vs. servidor
Hay dos enfoques principales para convertir/comprimir audio en una app web. Elegir uno u otro depende del tamaño de los ficheros, del presupuesto y de la compatibilidad que busques.
Servidor con FFmpeg
- Robusto, rápido y con bajo consumo en el cliente.
- Escalable con colas (RabbitMQ, SQS) y workers.
- Control total de códecs, filtros y normalización.
Ideal para cargas masivas, backend ya existente o workflows controlados.
Navegador con ffmpeg.wasm
- Privacidad: el archivo no sale del dispositivo.
- Menos infraestructura y sin colas.
- Más uso de CPU y RAM en el cliente; conviene usar Web Workers.
Útil para notas de voz o tareas ligeras; evita procesados largos en móviles antiguos.
Presets de calidad recomendados
- Voz (notas, entrevistas): 96–128 kbps, mono opcional. Buen equilibrio entre claridad y tamaño.
- Música ligera o voz con fondo: 128–160 kbps CBR o VBR alto.
- Música completa: 192 kbps o superior si el público lo requiere.
- Archivo ultraligero: 64 kbps para voz cuando el tamaño manda.
Ejemplos de código
FFmpeg CLI (servidor)
# Voz clara (mono) a 96 kbps
ffmpeg -i input.m4a -ac 1 -c:a libmp3lame -b:a 96k output.mp3
# Música a 192 kbps CBR
ffmpeg -i input.wav -c:a libmp3lame -b:a 192k output.mp3
# VBR de calidad alta (~170–210 kbps)
ffmpeg -i input.wav -c:a libmp3lame -q:a 2 output.mp3
Node.js (fluent-ffmpeg)
import ffmpeg from "fluent-ffmpeg";
function aMp3Voz(inputPath, outPath) {
return new Promise((res, rej) => {
ffmpeg(inputPath)
.audioChannels(1)
.audioCodec("libmp3lame")
.audioBitrate("96k")
.on("end", res)
.on("error", rej)
.save(outPath);
});
}
Python (pydub + FFmpeg)
from pydub import AudioSegment
audio = AudioSegment.from_file("input.opus")
audio.set_frame_rate(44100).set_channels(1).export("out.mp3", format="mp3", bitrate="96k")
En el navegador con ffmpeg.wasm
import { createFFmpeg, fetchFile } from "@ffmpeg/ffmpeg";
const ffmpeg = createFFmpeg({ log: false });
async function convertirEnCliente(file) {
if (!ffmpeg.isLoaded()) await ffmpeg.load();
ffmpeg.FS("writeFile", "in.m4a", await fetchFile(file));
await ffmpeg.run("-i", "in.m4a", "-ac", "1", "-c:a", "libmp3lame", "-b:a", "96k", "out.mp3");
const data = ffmpeg.FS("readFile", "out.mp3");
return new Blob([data.buffer], { type: "audio/mpeg" });
}
Consejo: ejecuta ffmpeg.wasm dentro de un Web Worker para no bloquear la UI y muestra progreso usando
ffmpeg.setProgress
.
UX para audios de móvil (WhatsApp/Telegram)
- Botón “Arrastrar y soltar” + selector de archivos:
accept="audio/*,.opus,.m4a,.aac,.ogg,.amr"
. - Detecta origen común: si es
.opus
o.ogg
, sugiere guía de paso a MP3. - CTA alterno para “reducir tamaño de un MP3” (consulta popular en Analytics).
- Explica bitrates en lenguaje simple y guarda la última elección en localStorage.
Rendimiento, costes y seguridad
Rendimiento
- Normaliza a 44,1 kHz cuando la fuente lo permita para evitar reprocesados.
- Procesa en cola y responde con webhook si el archivo es grande.
- Cachea resultados repetidos por hash (MD5/SHA-256).
Seguridad/privacidad
- Valida MIME y extensión; limita duración/tamaño.
- Elimina ficheros temporales tras la conversión.
- Ofrece procesado local con ffmpeg.wasm cuando la privacidad sea clave.
🔁 Herramientas listas para usar
Preguntas frecuentes
¿CBR o VBR para la web?
En voz, CBR 96–128 kbps es predecible y estable; en música, VBR alto (-q:a 2
) mantiene calidad con pesos contenidos.
¿Qué hago con OPUS/OGG de WhatsApp?
Convierte a un formato universal para compatibilidad en coche/TV. Sigue esta guía de OPUS → MP3.
¿Puedo recomprimir un MP3 para que pese menos?
Sí, pero evita múltiples pasadas. Usa una sola conversión a tu destino (por ejemplo, comprimir un MP3 existente).
Online • Gratis • Compatible con móvil y PC