无法在fluent-ffmpeg中使用ffprobe

时间:2014-07-24 03:35:04

标签: node.js ffmpeg npm

我打算使用ffprobe函数来提取视频信息,这是我的代码:

var FFmpeg = require('fluent-ffmpeg');
//...
var convert_using_ffmpeg = function (source, target) {

    var tempfile = path.join(config.tmproot, path.basename(target));

    new FFmpeg({ source: source })
        .withVideoCodec('libx264')
        .withVideoBitrate('512')
        .withAudioQuality(5)
        .withAudioCodec('libmp3lame')
        .withSize('360x288')
        //.ffprobe(function(err,data) {
        //  console.dir(data);
        //})
        .toFormat('flv')
        .on('error', function (err) {
            console.log('An error occurred: ' + err.message);
        })
        .saveToFile(tempfile, function () {
            fs.rename(tempfile, target);
        });
};

当我执行程序时,编译器只是说Object #<FfmpegCommand> has no method 'ffprobe。 fluent-ffmpeg API说我应该在执行之前添加FFMPEG_PATH和FFPROBE_PATH环境变量,但事实是我可以直接在命令行执行ffmpeg,即使它在PATH环境变量中不存在,并且node.js程序成功运行而没有唤起ffprobe功能。此外,API还说ffprobe与ffmpeg的大多数分布一起使用,如果是这样,我如何单独将ffprobe添加到环境变量中?

我目前正在使用fluent-ffmpeg 1.7.0。

4 个答案:

答案 0 :(得分:1)

在调用之前尝试设置FFprobe路径:

ffmpeg.setFfprobePath("c:\\program files\\ffmpeg\\bin\\ffprobe.exe");
ffmpeg.ffprobe(sourceFile.path, function(err, metadata) {
    if (err)
    {
        console.log(err);
    }
    else{
        console.log(metadata);
    }
});

答案 1 :(得分:0)

我认为您阅读的文档实际上是2.x而不是1.x。

尝试使用npm install --save fluent-ffmpeg@2.0.0-rc1

升级fluent-ffmpeg模块

答案 2 :(得分:0)

我当时正在处理Electron项目,我的Node版本是10.x.x,遇到了这个问题并尝试了多种方法,最后解决了我的问题:

  1. 在ffmpeg v4.0.0之后,如果您尚未下载二进制文件,则需要下载 FF Binaries

  2. 您需要将二进制路径明确设置到您的节点项目中。

    const ffmpeg = require('fluent-ffmpeg');
    var ffmpegPath = require("ffmpeg-binaries");
    ffmpeg.setFfmpegPath(ffmpegPath);
    ffmpeg.setFfprobePath("D:\\sandbox\\node-proj\\binaries\\ffprobe.exe");

答案 3 :(得分:0)

对于ffprobe,对于其他扩展名也应执行类似的操作

这样,无需在操作系统中安装ffmpeg

const ffmpeg = require('fluent-ffmpeg');
var ffprobe = require('ffprobe-static');
ffmpeg.setFfprobePath(ffprobe.path);