【问题标题】:Get video resolution in nodejs在nodejs中获取视频分辨率
【发布时间】:2015-11-02 16:18:42
【问题描述】:

我一直试图在没有真正找到任何答案的情况下得到答案。如果这听起来很愚蠢或很明显,请原谅。

我有一个 nodejs 应用程序,基本上我想简单地获得视频的分辨率。想象一下,我将电影存储在磁盘上,我想知道它是 720p 还是 1080p 或其他格式。

我知道我可能需要使用 ffmpeg 来执行此操作,但后来我也知道 ffmpeg 主要用于“录制、转换和流式传输音频和视频文件”。 这并不意味着检索视频分辨率。

感谢您的帮助

编辑 1: node.js 应用程序是一个桌面应用程序,需要可移植到 Linux、Windows 和 OS X。如果可能的话,将更感谢可移植的答案,但当然欢迎任何答案。

【问题讨论】:

    标签: node.js video ffmpeg resolution


    【解决方案1】:

    fileMetaData 将包含宽度、高度、编解码器信息、纵横比等...

    const ffprobe = require('ffprobe')
    const ffprobeStatic = require('ffprobe-static')
    const fileMetaData = await ffprobe(fileName, { path: ffprobeStatic.path })
    

    fileName 可以是 video('webm', 'mov', 'wmv', 'mpg', 'mpeg', 'mp4','flv' etc..) 或 image(jpg, gif, png etc..) ) 小路。 文件名示例:/path/to/video.mp4 或http://example.com/video.mp4

    【讨论】:

      【解决方案2】:

      有一个名为get-video-dimensionsnpm 包也使用ffprobe,而且它更易于使用。它还支持 Promise 和 async/await。

      import getDimensions from 'get-video-dimensions';
      

      使用承诺

      getDimensions('video.mp4').then(dimensions => {
        console.log(dimensions.width);
        console.log(dimensions.height);
      })
      

      异步/等待

      const dimensions = await getDimensions('video.mp4');
      console.log(dimensions.width);
      console.log(dimensions.height);
      

      【讨论】:

        【解决方案3】:

        我使用 node-ffprobe 为图像完成此操作:

        var probe = require('/usr/lib/node_modules/node-ffprobe');
        probe(filePath, function (err, data) {
            //the 'data' variable contains the information about the media file
        });
        

        【讨论】:

          【解决方案4】:

          老实说,我认为我发现的最佳方法是将fluent-ffmpeg 与 ffprobe 一起使用,因为您可以设置可执行文件的路径。唯一的问题是 ffmpeg 必须随应用程序一起提供。因此必须提供不同的可执行文件,每个发行版/操作系统/派生版本都有一个。如果有人有更好的答案,我愿意回答。

          使用 fluent-ffmpeg 获取宽度、高度和纵横比是这样完成的:

          var ffmpeg = require('fluent-ffmpeg');
          
          ffmpeg.setFfprobePath(pathToFfprobeExecutable);
          
          ffmpeg.ffprobe(pathToYourVideo, function(err, metadata) {
              if (err) {
                  console.error(err);
              } else {
                  // metadata should contain 'width', 'height' and 'display_aspect_ratio'
                  console.log(metadata);
              }
          });
          

          【讨论】:

            【解决方案5】:

            执行此操作的一种方法是将另一个应用程序作为子进程运行,并从标准输出中获取分辨率。我不知道有任何纯 node.js 解决方案。

            child_process.exechttps://nodejs.org/api/child_process.html#child_process_child_process_exec_command_options_callback

            ffprobe How can I get the resolution (width and height) for a video file from a linux command line?

            【讨论】:

            • 这可能很好,虽然我不知道可移植性,因为 ffmpeg 需要安装在主机的机器上,这可能很困难。我试试看我告诉你
            • 是的,如果您了解您的部署环境,您也许可以将二进制文件与您的应用一起分发。
            • 是的,这将是最好的主意。主要是 OSX、Linux(Debian、FreeBSD)和 windows
            猜你喜欢
            • 1970-01-01
            • 2017-05-09
            • 2011-07-05
            • 1970-01-01
            • 1970-01-01
            • 2013-02-27
            • 2012-10-25
            • 2013-04-03
            • 1970-01-01
            相关资源
            最近更新 更多