Node.js 在nodejs中获得视频分辨率

Node.js 在nodejs中获得视频分辨率,node.js,video,ffmpeg,resolution,Node.js,Video,Ffmpeg,Resolution,我一直在试图找到一个答案,但没有真正找到答案。如果这听起来愚蠢或明显,请原谅 我有一个nodejs应用程序,基本上我只想获得视频的分辨率。想象一下,我把胶卷存储在磁盘上,我想知道它是720p还是1080p或其他格式 我知道我可能需要使用ffmpeg来实现这一点,但我也知道ffmpeg主要用于“录制、转换和流式传输音频和视频文件”。 这并不意味着检索视频分辨率 谢谢你的帮助 编辑1: node.js应用程序是一个桌面应用程序,需要可移植到Linux、windows和OS X。如果可能的话,请提供一

我一直在试图找到一个答案,但没有真正找到答案。如果这听起来愚蠢或明显,请原谅

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

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

谢谢你的帮助

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

一种方法是将另一个应用程序作为子进程运行,并从std中获取解决方案。我不知道有任何纯node.js解决方案可以解决这个问题

请参见
child\u process.exec

ffprobe

老实说,我认为我找到的最好的方法是使用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);
    }
});

我使用节点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
});

有一个名为
npm
的包,它也使用
ffprobe
,使用起来更容易。它还支持承诺和异步/等待

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);
异步/等待

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

文件元数据将具有宽度、高度、编解码器信息、纵横比等

const ffprobe = require('ffprobe')
const ffprobeStatic = require('ffprobe-static')
const fileMetaData = await ffprobe(fileName, { path: ffprobeStatic.path })
文件名可以是视频(“webm”、“mov”、“wmv”、“mpg”、“mpeg”、“mp4”、“flv”等)或图像(jpg、gif、png等)路径。 文件名示例:/path/to/video.mp4或


这可能很好,尽管我不知道可移植性,因为ffmpeg需要安装在主机的机器上,这可能很困难。我会尝试一下,我让你知道,是的,如果你知道你的部署环境,你也许可以在你的应用程序中分发二进制文件。是的,那将是最好的主意。它主要是OSX、Linux(Debian、FreeBSD)和windows