我一直试图在没有找到任何答案的情况下得到答案。如果这听起来很愚蠢或明显,请原谅。
我有一个nodejs应用程序,基本上我想简单地获得视频的分辨率。想象一下,我将电影存储在磁盘上,我希望能够知道它是720p还是1080p或其他任何东西。
我明白我可能需要使用ffmpeg这样做,但后来我也明白ffmpeg主要用于“录制,转换和流式处理音频和视频文件”。 这并不意味着检索视频分辨率。
感谢您的帮助
编辑1: node.js应用程序是一个桌面应用程序,需要可移植到Linux,Windows和OS X.如果可能的话,便宜的答案会更受欢迎,但当然欢迎任何答案。
答案 0 :(得分: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);
}
});
答案 1 :(得分:1)
执行此操作的一种方法是将另一个应用程序作为子进程运行,并从std中获取解决方案。我不知道任何纯粹的node.js解决方案。
请参阅app
https://nodejs.org/api/child_process.html#child_process_child_process_exec_command_options_callback
和child_process.exec
How can I get the resolution (width and height) for a video file from a linux command line?
答案 2 :(得分:1)
我使用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
});
答案 3 :(得分:1)
有一个名为get-video-dimensions
的npm
软件包也使用ffprobe
,使用起来更容易。它还支持promises和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);
答案 4 :(得分:1)
fileMetaData 将具有宽度,高度,编解码器信息,长宽比等...
const ffprobe = require('ffprobe')
const ffprobeStatic = require('ffprobe-static')
const fileMetaData = await ffprobe(fileName, { path: ffprobeStatic.path })
fileName可以是视频(“ webm”,“ mov”,“ wmv”,“ mpg”,“ mpeg”,“ mp4”,“ flv”等)或图像(jpg,gif,png等)。 )路径。 fileName示例:/path/to/video.mp4或http://example.com/video.mp4