我正在使用Recorder.js在浏览器中录制来自getUserMedia({audio:true});
的音频,然后将其导出为WAV文件,因为这是该库提供的唯一选项。
1分20秒的文件大14.1 MB。我需要将音频上传到服务器,我需要快速完成。如何以任何其他压缩格式转换WAV音频以降低文件大小?
我不介意转换为:
如果目前无法转换为这些格式中的任何一种,我该如何压缩客户端上的WAV文件?
PS:我做了很多搜索,找到了在JS中转换WAV的东西,却什么也没找到。 libmp3lame.js无法在Chrome中使用。谢谢!
答案 0 :(得分:31)
我已经制作了一个录音机,可以直接从浏览器中记录到MP3,并结合RecorderJS和libmp3lame.js
您可以在此处找到gitHub项目: https://github.com/nusofthq/Recordmp3js
以及对实施的更详细说明: http://nusofthq.com/blog/recording-mp3-using-only-html5-and-javascript-recordmp3-js/
答案 1 :(得分:4)
你真正想要的是mediaStream“Recording API”,目前正在进行中。在可用之前,我建议在C / C ++源代码上使用emscriptem,并考虑在webworker中运行它以避免阻止UI和其他选项卡。
答案 2 :(得分:3)
我遇到了同样的问题 提出了一个非常快速和肮脏的解决方案:
进一步的英特尔见Documentation zip.js
至少这会减小很多尺寸,文件大约小于75%,因此 1:4压缩
更新:或许看看这个:https://webrtc.github.io/samples/
这是谷歌开发的Chrome和Firefox的聊天应用程序,我假设有一种CC-License
答案 3 :(得分:2)
我有一个类似的问题(也使用recorder.js),并设法解决使用精湛的videoconverter.js项目,其中包括使用emscripen的ffmpeg端口到Javascript。这方面的缺点是ffmpeg.js文件约为25Mb。
我修改了recorderWorker.js中现有的exportWAV
函数,以返回WAV(用于HTML5 <audio>
播放)和包含编码的MP2文件的Blob:
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;
}
此方法可用于将WAV编码为ffmpeg的libavcodec
答案 4 :(得分:1)
我能够使用opus.js,
实现压缩你可以在这里找到我的实现:recordOpus,但有一个问题,我的是服务器端,我使用node.js
服务器....