【问题标题】:How to setup codec, samplerate and bitrate on an audio blob in javascript?如何在 javascript 中的音频 blob 上设置编解码器、采样率和比特率?
【发布时间】:2019-04-29 05:45:23
【问题描述】:

我刚刚创建了一个 blob:

const audioBlob = new Blob(audioChunks, { 'type' : 'audio/wav; codecs=0' });

并以base64格式发送到后端。我使用以下代码将其保存到名为“test.wav”的文件中:

await writeFile('./temp/test.wav', Buffer.from(filename.replace('data:audio/wav; codecs=0;base64,', ''), 'base64'), 'base64');

在输出“test.wav”文件中,我将编解码器作为 opus,比特率 = N/A 和采样率 = 48000。我想将这些值更改为 codec=wav、bitrate=256kbps 和 sample rate=16000。如何在节点(或角度)中实现它?

Here 是我的前端代码的链接。

【问题讨论】:

  • 您不能在 16kHz 未压缩 WAV 音频上获得 256kbps 比特率。假设单声道和 16 位样本(通常),您的比特率将是 16000 样本/秒 * 2 字节/样本 = 32000 字节/秒。
  • 无论如何,请向我们展示更多代码; audioChunks 来自哪里?
  • @AKX 刚刚在 stackblitz 上添加了前端代码的链接
  • 你需要查看AudioRecorder的mimeType属性。您不能仅仅假设您在 dataavailable 回调中获得的数据块可以解释为 PCM WAV,并创建具有该类型的 blob。例如,我看到audio/webm;codecs=opus,即 WebM 容器中的 OPUS。一旦你有了众所周知格式的数据,你就可以使用 ffmpeg 之类的转码器将其转换为另一种格式。
  • 我应该使用哪种 mimetype 来获得 wav 输出而不是 opus?它说不支持 audio/wav 或 audio/x-wav。

标签: javascript node.js audio audio-streaming audio-recording


【解决方案1】:

此行只提供 mime 信息,但不影响实际输出

const audioBlob = new Blob(audioChunks, { 'type' : 'audio/wav; codecs=0' });

要选择正确的音频编解码器和比特率,请使用以下选项开始录制

var options = {
  audioBitsPerSecond : 128000,
  mimeType : 'audio/ogg'
}
var mediaRecorder = new MediaRecorder(stream, options);

据我所知,WebRTC默认支持ogg编解码器,所以它是跨浏览器兼容的

稍后,在后端,您需要将ogg 音频流转换为您想要使用的任何其他内容,例如fluent-ffmpeg

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-22
    • 1970-01-01
    • 2013-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多