ffmpeg / ffprobe生成数值数组输出

时间:2015-12-28 20:25:56

标签: node.js ffmpeg ffprobe

我一直在使用this npm module:创建一个波形数字输出,如下所示:

[0,0.0062,0.0688,0.2524,0.2691,0.2645,0.1594,0.1397,0.1672

然而,这个模块可能不会得到很好的支持,并且现在已经维护了几年。该模块将自身描述为围绕ffprobe"。

的小型包装器

我的问题 - ffmpeg / ffprobe命令行产生数字数组输出会是什么样的?

非常感谢你。

1 个答案:

答案 0 :(得分:1)

$ npm install waveform-util 
$ cd node_modules\waveform-util
$ cat package.json | grep depend -A 10 | head -4

我们发现存在node-ffprobepcm依赖关系。

$ cd lib
$ vim waveform.js

有两个出口。 audio_data使用ffprobegenerate_peaks使用pcm。让我们先检查node-ffprobe

$ cd ..\node-ffprobe      # I'm on windows - hence backslashes
$ grep -Rni spawn .       # or exec, but exec returned nothing useful

我们发现spawn L84

中使用了./lib/ffprobe.js
$ 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(' '));,我们可以获得运行应用时用于运行的特定命令。

你还没有发布你正在使用的例子,所以我必须回到波形实用。

$ 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以下的char处理程序上执行额外操作,因此输出可能不同,但您将捕获该命令。