gpt4 book ai didi

javascript - 如何在js程序中找到以秒为单位的webm(opus)音频文件的持续时间?

转载 作者:行者123 更新时间:2023-12-03 01:17:23 25 4
gpt4 key购买 nike

在javascript网页上,我使用HTML5 Media API生成了一条音频消息,然后通过socketio将其发送到将文件保存在磁盘上的nodejs服务器。一切正常。

Javascript块,客户端:

navigator.mediaDevices
.getUserMedia({ audio: true })
.then(stream => {

const mediaRecorder = new MediaRecorder(stream)
...
}

服务器端,我成功保存了webm / opus文件:
$ ll audiofiles/audiofile.webm
-rw-rw-r-- 1 username 180K May 29 21:04 audiofiles/audiofile.webm

使用vlc Player,我看到以秒为单位的持续时间将近28秒。

让我们检查一下mediainfo / ffmpeg:

使用 mediainfo:
$ mediainfo audiofiles/audiofile.webm
General
Complete name : audiofiles/audiofile.webm
Format : WebM
Format version : Version 4 / Version 2
File size : 180 KiB
Writing application : Chrome
Writing library : Chrome
IsTruncated : Yes

Audio
ID : 1
Format : Opus
Codec ID : A_OPUS
Channel(s) : 1 channel
Channel positions : Front: C
Sampling rate : 48.0 kHz
Bit depth : 32 bits
Compression mode : Lossy
Language : English
Default : Yes
Forced : No

使用 ffmpeg:
$ ffmpeg -hide_banner -i audiofiles/audiofile.webm
Input #0, matroska,webm, from 'audiofiles/audiofile.webm':
Metadata:
encoder : Chrome
Duration: N/A, start: 0.000000, bitrate: N/A
Stream #0:0(eng): Audio: opus, 48000 Hz, mono, fltp (default)
At least one output file must be specified

我的问题是:

如何在服务器端的节点服务器日志文件上跟踪webm音频文件的长度(以秒为单位)?

我需要具有文件的近似持续时间(以秒为单位)。可能使用nodejs函数。

运行时的不良/粗糙解决方案可能是根据经验将文件的字节长度与秒的长度映射起来...以特定的编码/格式为例:1000字节〜= 1秒。

还有更好的方法来测量音频文件的持续时间,可能在nodejs代码中?

最佳答案

Node.js并非以其音频功能而闻名。

我喜欢映射文件长度以确定持续时间的经验方法,并且我敢肯定,如果您可以提取采样率或类似信息进行计算,那么您可以得到一些结果,但是如果您可以访问ffmpeg您的环境,我个人将使用子过程来获取该信息:

const { exec } = require('child_process');

let your_webm_file = 'audiofiles/audiofile.webm';

// https://trac.ffmpeg.org/wiki/FFprobeTips#Duration
let cmd_ffprobe_duration = `ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 ${your_webm_file}`;

exec(cmd_ffprobe_duration, (error, duration, stderr) => {
if (error || stderr)
return console.error('Can\'t determine webm file duration');
console.log(duration); // 30.543000
});

对于像我这样不知道 ll是什么的人。

关于javascript - 如何在js程序中找到以秒为单位的webm(opus)音频文件的持续时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62093480/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com