【问题标题】:Unable to use ffprobe in fluent-ffmpeg无法在 fluent-ffmpeg 中使用 ffprobe
【发布时间】:2014-07-24 03:35:03
【问题描述】:

我打算使用 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。

【问题讨论】:

    标签: node.js ffmpeg npm


    【解决方案1】:

    对于 ffprobe,其他扩展也应该这样做

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

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

    【讨论】:

      【解决方案2】:

      在调用之前尝试设置 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);
          }
      });
      

      【讨论】:

      • 感谢帮助,但我几乎忘记了我是如何解决这个问题的._.
      • 我仍然没有完全了解 PATH 是什么(我试图将它配置为 w7 一个小时但没有任何运气),这完美地修复了它。
      • 这个答案是否可以应用于节点 js 环境中的服务器端?如果是这样,我该怎么做
      【解决方案3】:

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

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

      【讨论】:

      • 我试过了,但是之后好像模块根本不起作用,我只能得到输出An error occurred: spawn ENOENT
      • 你的 PATH 中有明确的 ffprobe 吗?它并不总是与 ffmpeg 捆绑在一起。
      • 不,我找不到 ffprobe,因为我只有一个 ffmpeg.exe,但问题似乎与 ffprobe 无关,因为我已经评论了它们。
      • 您还需要 ffprobe.exe,因为 fluent-ffmpeg 在处理之前使用它来收集元数据。
      • 如果这不起作用,我建议在该实际项目上打开一个问题,而不是通过电子邮件向维护人员发送电子邮件,因为其他人在 @987654321 使用和观看该项目已有大量知识@
      【解决方案4】:

      我在做 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");
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-09-24
        • 1970-01-01
        • 2023-03-19
        • 2021-07-20
        • 2021-10-01
        • 2015-12-27
        • 1970-01-01
        相关资源
        最近更新 更多