在nodejs中获取视频分辨率
Get video resolution in nodejs
我一直试图找到这个问题的答案,但没有真正找到任何答案。如果这听起来很愚蠢或显而易见,请原谅。
我有一个 nodejs 应用程序,基本上我想简单地获取视频的分辨率。想象一下,我将电影存储在磁盘上,我想知道它是 720p 还是 1080p 或其他格式。
我了解到我可能需要使用 ffmpeg 来这样做,但后来我也了解到 ffmpeg 主要用于 "record, convert and stream audio and video files"。
这并不意味着检索视频分辨率。
感谢您的帮助
编辑 1:
node.js 应用程序是一个桌面应用程序,需要可移植到 Linux、windows 和 OS X。如果可能的话,一个可移植的答案会更受欢迎,但当然任何答案欢迎。
一种方法是 运行 另一个应用程序作为子进程,并从 std 输出中获取分辨率。我不知道有任何纯粹的 node.js 解决方案。
参见 child_process.exec
https://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?
老实说,我认为我发现的最佳方法是将 fluent-ffmpeg 与 ffprobe 一起使用,因为您可以设置可执行文件的路径。唯一的问题是 ffmpeg 必须随应用程序一起提供。因此必须运送不同的可执行文件,每个 distribution/os/derivation 一个。如果有人有更好的答案,我愿意回答。
使用 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);
}
});
我使用 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
});
有一个名为 get-video-dimensions
的 npm
包也使用了 ffprobe
,而且它更容易使用。它还支持承诺和 async/await.
import getDimensions from 'get-video-dimensions';
使用承诺:
getDimensions('video.mp4').then(dimensions => {
console.log(dimensions.width);
console.log(dimensions.height);
})
或async/await:
const dimensions = await getDimensions('video.mp4');
console.log(dimensions.width);
console.log(dimensions.height);
fileMetaData 将具有宽度、高度、编解码器信息、纵横比等...
const ffprobe = require('ffprobe')
const ffprobeStatic = require('ffprobe-static')
const fileMetaData = await ffprobe(fileName, { path: ffprobeStatic.path })
fileName could be video('webm', 'mov', 'wmv', 'mpg', 'mpeg', 'mp4','flv' etc..) or image(jpg, gif, png etc..) path.
fileName example: /path/to/video.mp4 or http://example.com/video.mp4
我一直试图找到这个问题的答案,但没有真正找到任何答案。如果这听起来很愚蠢或显而易见,请原谅。
我有一个 nodejs 应用程序,基本上我想简单地获取视频的分辨率。想象一下,我将电影存储在磁盘上,我想知道它是 720p 还是 1080p 或其他格式。
我了解到我可能需要使用 ffmpeg 来这样做,但后来我也了解到 ffmpeg 主要用于 "record, convert and stream audio and video files"。 这并不意味着检索视频分辨率。
感谢您的帮助
编辑 1: node.js 应用程序是一个桌面应用程序,需要可移植到 Linux、windows 和 OS X。如果可能的话,一个可移植的答案会更受欢迎,但当然任何答案欢迎。
一种方法是 运行 另一个应用程序作为子进程,并从 std 输出中获取分辨率。我不知道有任何纯粹的 node.js 解决方案。
参见 child_process.exec
https://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?
老实说,我认为我发现的最佳方法是将 fluent-ffmpeg 与 ffprobe 一起使用,因为您可以设置可执行文件的路径。唯一的问题是 ffmpeg 必须随应用程序一起提供。因此必须运送不同的可执行文件,每个 distribution/os/derivation 一个。如果有人有更好的答案,我愿意回答。
使用 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);
}
});
我使用 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
});
有一个名为 get-video-dimensions
的 npm
包也使用了 ffprobe
,而且它更容易使用。它还支持承诺和 async/await.
import getDimensions from 'get-video-dimensions';
使用承诺:
getDimensions('video.mp4').then(dimensions => {
console.log(dimensions.width);
console.log(dimensions.height);
})
或async/await:
const dimensions = await getDimensions('video.mp4');
console.log(dimensions.width);
console.log(dimensions.height);
fileMetaData 将具有宽度、高度、编解码器信息、纵横比等...
const ffprobe = require('ffprobe')
const ffprobeStatic = require('ffprobe-static')
const fileMetaData = await ffprobe(fileName, { path: ffprobeStatic.path })
fileName could be video('webm', 'mov', 'wmv', 'mpg', 'mpeg', 'mp4','flv' etc..) or image(jpg, gif, png etc..) path. fileName example: /path/to/video.mp4 or http://example.com/video.mp4