在nodejs中获取视频分辨率

tgd*_*gdn 5 video ffmpeg resolution node.js

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

我有一个nodejs应用程序,基本上我想简单地获得视频的分辨率.想象一下,我将电影存储在磁盘上,我希望能够知道它是720p还是1080p或其他任何东西.

我知道我可能需要使用ffmpeg这样做,但后来我也明白ffmpeg主要用于"记录,转换和流式处理音频和视频文件".这并不意味着检索视频分辨率.

谢谢您的帮助

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

tgd*_*gdn 5

老实说,我认为我找到的最好的方法是使用fluent-ffmpeg和ffprobe,因为你可以设置可执行文件的路径.唯一的问题是ffmpeg必须随应用程序一起提供.因此必须提供不同的可执行文件,每个分发/ os /派生一个.如果有人有更好的东西,我愿意接受答案.

使用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);
    }
});
Run Code Online (Sandbox Code Playgroud)


Sin*_*dro 5

有一个npm叫做的包get-video-dimensions也使用ffprobe,它更容易使用。它还支持承诺和异步/等待。

import getDimensions from 'get-video-dimensions';
Run Code Online (Sandbox Code Playgroud)

使用承诺

getDimensions('video.mp4').then(dimensions => {
  console.log(dimensions.width);
  console.log(dimensions.height);
})
Run Code Online (Sandbox Code Playgroud)

异步/等待

const dimensions = await getDimensions('video.mp4');
console.log(dimensions.width);
console.log(dimensions.height);
Run Code Online (Sandbox Code Playgroud)