online - Conversión de WAV a cualquier formato de audio comprimido en JavaScript del lado del cliente
formatos de video para html5 (5)
Estoy grabando audio desde getUserMedia({audio:true});
en el navegador con Recorder.js y luego exportarlo como un archivo WAV porque esa es la única opción que proporciona la biblioteca.
Un archivo de 1 minuto y 20 segundos tiene un tamaño de 14.1 MB. Necesito subir el audio a un servidor y debo hacerlo rápido. ¿Cómo convierto el audio WAV en cualquier otro formato comprimido para reducir el tamaño del archivo?
No me importa convertir a
- MP3
- Opus
- WebM
- Ogg
- FLAC
- cualquier otro formato que conozcas
Si a partir de ahora no hay manera de convertir a alguno de estos formatos, ¿cómo puedo comprimir el archivo WAV en el cliente?
PD: Hice muchas búsquedas para encontrar cualquier cosa que convierta WAV en JS, pero no encontré nada. libmp3lame.js no funciona en Chrome.
¡Gracias!
Estaba enfrentando el mismo problema y se me ocurrió una solución bastante rápida y sucia:
- zip el archivo wav con zip.js (funciona con Chrome, Firefox, Safari 6 e Internet Explorer 10)
Más información ver Documentación zip.js
Al menos esto reduce mucho el tamaño, el archivo es aproximadamente un 75% más pequeño, por lo que la compresión 1: 4
ACTUALIZACIÓN: tal vez echar un vistazo a esto: https://webrtc.github.io/samples/
Es una aplicación de chat para Chrome y Firefox desarrollada por google, supongo que con un tipo de licencia CC
He hecho una grabadora de audio que graba a mp3 directamente desde el navegador combinando RecorderJS y libmp3lame.js
Puede encontrar el proyecto gitHub aquí: https://github.com/nusofthq/Recordmp3js
y una explicación más detallada de la implementación: http://nusofthq.com/blog/recording-mp3-using-only-html5-and-javascript-recordmp3-js/
Lo que realmente desea es la "API de grabación" de mediaStream, en la que se está trabajando actualmente. Hasta que esté disponible, aconsejo usar emscriptem en la fuente C / C ++, y considere ejecutarlo en un trabajador web para evitar bloquear la interfaz de usuario y otras pestañas.
Pude lograr la compresión utilizando opus.js ,
Puede encontrar mi implementación aquí: recordOpus , pero hay un retén, el mío está acoplado con el lado del servidor, y uso el servidor node.js
...
Tuve un problema similar (también usando recorder.js) y he logrado resolverlo utilizando el excelente proyecto videoconverter.js que incluye un puerto de ffmpeg a Javascript usando emscripen. La desventaja de esto es que el archivo ffmpeg.js tiene aproximadamente 25Mb.
exportWAV
función exportWAV
existente en recorderWorker.js para devolver tanto una reproducción WAV (para HTML5 <audio>
) como una Blob que contiene un archivo MP2 codificado:
function encodeWAV(samples) {
var buffer = new ArrayBuffer(44 + samples.length * 2);
var view = new DataView(buffer);
/* ... various writing methods */
return { wavdata: new Blob([buffer], { type: "audio/wav" }), mp2data: ffmpeg_convert(buffer) };
}
function ffmpeg_convert(buffer) {
console.log("starting mp2 conversion");
var args = "-i input -f mp2 output.mp2";
var results = ffmpeg_run({
arguments: args.split(" "),
files: [
{
data: new Uint8Array(buffer),
"name": "input"
}
]
});
if (results) {
var file = results[0];
console.log("File recieved", file.name, file.data);
return new Blob([file.data], { type: "audio/mpeg" });
}
return null;
}
Este método se puede usar para codificar el WAV a cualquier códec compatible con libavcodec
de ffmpeg