在 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 播放器,我看到以秒为单位的持续时间几乎是 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 代码中?