在客户端 JavaScript 中将 WAV 转换为任何压缩音频格式
Posted
技术标签:
【中文标题】在客户端 JavaScript 中将 WAV 转换为任何压缩音频格式【英文标题】:Converting WAV to any compressed audio format in client-side JavaScript 【发布时间】:2013-07-01 16:14:16 【问题描述】:我正在使用 Recorder.js 在浏览器中录制来自 getUserMedia(audio:true);
的音频,然后将其导出为 WAV 文件,因为这是库提供的唯一选项。
1 分 20 秒的文件大小为 14.1 MB。我需要将音频上传到服务器,而且我需要快速完成。如何转换任何其他压缩格式的 WAV 音频以减小文件大小?
我不介意转换为:
MP3 作品 WebM 奥格 FLAC 您知道的任何其他格式如果目前无法转换为这些格式中的任何一种,我该如何在客户端压缩 WAV 文件?
PS:我做了很多搜索以找到在 JS 中转换 WAV 的任何内容,但一无所获。 libmp3lame.js 在 Chrome 中不起作用。
谢谢!
【问题讨论】:
我在***.com/questions/17507799/… 有一个类似的帖子——我遇到了基本相同的问题,我真的希望有人回答你的问题。 我昨天看到了你的问题。对我来说,文件太大,所以将它上传到服务器并转换它不是一个可行的选择。对于你的情况,如果你想上传然后转换,使用虚拟机是最好的选择。 @ArjunBajaj 你找到解决方案了吗?如果你愿意,我很感兴趣。 【参考方案1】:您真正想要的是 mediaStream “Recording API”,目前正在开发中。在此之前,我建议在 C/C++ 源代码上使用 emscriptem,并考虑在 webworker 中运行它以避免阻塞 UI 和其他选项卡。
【讨论】:
【参考方案2】:我也遇到了同样的问题 想出了一个快速而肮脏的解决方案:
使用 zip.js 压缩 wav 文件(适用于 Chrome、Firefox、Safari 6 和 Internet Explorer 10)更多情报见Documentation zip.js
至少这大大减小了大小,文件大约小了 75%,所以 1:4 压缩
更新:也许看看这个:https://webrtc.github.io/samples/
它是谷歌为 Chrome 和 Firefox 开发的聊天应用程序,我假设它带有一种 CC-License
【讨论】:
谢谢!我会尝试一下! :)【参考方案3】:我遇到了类似的问题(也使用了 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】:我制作了一个录音机,可以直接从结合 RecorderJS 和 libmp3lame.js 的浏览器录制到 mp3
你可以在这里找到 gitHub 项目: https://github.com/nusofthq/Recordmp3js
以及更详细的实现说明: http://nusofthq.com/blog/recording-mp3-using-only-html5-and-javascript-recordmp3-js/
【讨论】:
谢谢,谢谢,谢谢。我希望我能投票 1000 次 @Remus Negrota,这适用于 Chrome,但在 Firefox 上挂起。我的研究发现,Firefox 的 libmp3lame.min.js 中出现了无限循环。您使用的是 libmp3lame.min.js 的修改版本吗?【参考方案5】:我能够使用opus.js 实现压缩,
你可以在这里找到我的实现:recordOpus,但有一个问题,我的是与服务器端耦合的,我使用node.js
服务器......
【讨论】:
以上是关于在客户端 JavaScript 中将 WAV 转换为任何压缩音频格式的主要内容,如果未能解决你的问题,请参考以下文章
如何以编程方式在 Android 中将 .mid 转换为 .wav 文件?
在 C# 或 C++ 中将压缩的 wav 文件转换为未压缩的 wav 文件的最简单方法是啥?