На веб-странице 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
Использование vl c 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.
Плохое / грубое решение во время выполнения может заключаться в эмпирическом сопоставлении длины файла в байтах с длиной в секундах ... Например, для спецификаций c кодировка / формат: 1000 байтов ~ = 1 se c.
Есть ли лучшая идея измерить продолжительность аудиофайла, возможно, в коде nodejs?