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, которую вы хотите.

(headtail дело только в том, чтобы вывести диапазон строк из файла)

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 вызовите, так что это может быть не тот же вывод, но вы захватите команду.

Другие вопросы по тегам