无法在流利的ffmpeg中使用ffprobe

5

我打算使用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环境变量,但事实上,即使在PATH环境变量中不存在ffmpeg,我也可以直接在命令行中执行它,并且node.js程序运行成功而不会调用ffprobe函数。此外,API还说ffprobe与大多数ffmpeg发行版一起提供,如果是这样,那么我如何将ffprobe单独添加到环境变量中呢?我目前使用的是fluent-ffmpeg 1.7.0版本。
4个回答

5

对于ffprobe,其他扩展名应该采取类似的方式

这样就不需要安装ffmpeg在操作系统中了。

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

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);
    }
});

谢谢你的帮助,但我几乎忘记了我是如何解决这个问题的。._. - GJ.
我仍然不知道 PATH 到底是什么(我试图在 w7 上配置它一个小时,但没有成功),但这个方法完美地解决了问题。 - Daniel Lizik
这个答案能适用于 Node.js 环境中的服务器端吗?如果可以,我该怎么做呢? - Andrey Solera

0
我正在开发 Electron 项目,我的 Node 版本是 10.x.x,我遇到了一个问题并尝试了多种方法,最终找到了解决方案:
  1. 在 ffmpeg v4.0.0 之后,如果你没有已经下载二进制文件,你需要下载它们 FF Binaries

  2. 你需要显式地将二进制文件路径设置到你的 Node 项目中。

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

0

我认为你所阅读的文档实际上是针对2.x而不是1.x的。

尝试使用npm install --save fluent-ffmpeg@2.0.0-rc1升级你的fluent-ffmpeg模块。


我已经尝试过了,但似乎在那之后该模块完全不工作,我只能得到输出 发生错误:spawn ENOENT - GJ.
你确定在 PATH 中已经安装了 ffprobe 吗?它并不总是与 ffmpeg 捆绑在一起。 - Ben Evans
不行,我找不到ffprobe,因为我只有一个ffmpeg.exe,但问题似乎与ffprobe无关,因为我已经将它们注释掉了。 - GJ.
您还需要ffprobe.exe,因为fluent-ffmpeg在处理之前使用它来收集元数据。 - Ben Evans
如果这个方法不起作用,我建议您在实际项目上开一个问题,而不是给维护者发送电子邮件,因为在 https://github.com/fluent-ffmpeg/node-fluent-ffmpeg/issues 上有许多其他人使用和观察该项目的知识。 - Ben Evans
谢谢您的建议。 - GJ.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接