ffmpeg/ffprobe для вывода числового массива
Я использовал этот модуль npm: для создания числового выходного сигнала, такого как это ниже:
[0,0.0062,0.0688,0.2524,0.2691,0.2645,0.1594,0.1397,0.1672
однако этот модуль может не поддерживаться очень хорошо и не поддерживается в течение нескольких лет. модуль описывает себя как "крошечную оболочку вокруг ffprobe".
мой вопрос - как будет выглядеть командная строка ffmpeg/ffprobe для вывода числового массива?
большое спасибо вам.
1 ответ
$ npm install waveform-util
$ cd node_modules\waveform-util
$ cat package.json | grep depend -A 10 | head -4
Мы видим, что есть node-ffprobe
а также pcm
зависимость.
$ cd lib
$ vim waveform.js
Есть два экспорта. audio_data
с помощью ffprobe
а также generate_peaks
с помощью pcm
, Давайте сначала проверим node-ffprobe
,
$ cd ..\node-ffprobe # I'm on windows - hence backslashes
$ grep -Rni spawn . # or exec, but exec returned nothing useful
Мы видим, что есть spawn
используется в ./lib/ffprobe.js
L84
$ head -84 lib/ffprobe.js | tail -1 # just print line 84
C:\del\express-drive\node_modules\node-ffprobe>head -84 lib/ffprobe.js | tail -1
var proc = spawn('ffprobe', ['-show_streams', '-show_format', '-loglevel', 'warning', file]),
Так что это узкое место, где ffprobe
команда запускается. Поместив: console.log(file)
или же console.log('ffprobe', ['-show_streams', '-show_format', '-loglevel', 'warning', file].join(' '));
до этой строки мы могли получить конкретную команду для запуска при запуске приложения.
Вы не опубликовали пример, который используете, поэтому я должен вернуться к waveform-util.
$ cd ..\waveform-util
$ grep -Rni ffprobe .
Так lib\waveform.js
L122 использует audio_path
в качестве первого параметра, который передается node-ffmpeg
, Я думаю, это было бы file
как последний аргумент в пользу spawn
, Но это не отвечает на ваш вопрос.
Если мы вернемся и посмотрим на waveform-util\lib\waveform.js:audio_data
это использует ffprobe
экспортировать только основную информацию о файле аудиоданных, но не генерировать аудиопоток из команды ffmpeg, которую вы хотите.
(head
tail
дело только в том, чтобы вывести диапазон строк из файла)
PCM
Давай проверим pcm
,
generate_peaks
от waveform-util\lib\waveform.js
использования pcm
модуль. Я сокращу это.
$ (node_modules) cd pcm
$ grep -Rni -A 2 spawn .
Второй результат показывает:
./lib/pcm.js:33: var ffmpeg = spawn('ffmpeg', ['-i',filename,'-f','s16le','-ac',channels,
./lib/pcm.js-34- '-acodec','pcm_s16le','-ar',sampleRate,'-y','pipe:1']);
./lib/pcm.js-35-
Вы можете генерировать команду так же, как указано выше; положить это до / после spawn
и он выведет вам команду, которую он выполняет:
console.log('ffmpeg', ['-i',filename,'-f','s16le','-ac',channels,'-acodec','pcm_s16le','-ar',sampleRate,'-y','pipe:1'].join(' '));
И при запуске чего-либо через waveform-util
вы увидите команду, которая производит все pcm
необходимо. Обратите внимание, что pcm
делает дополнительные манипуляции на .on('data', ...
обработчик ниже spawn
вызовите, так что это может быть не тот же вывод, но вы захватите команду.