Получить разрешение видео в nodejs
Я пытался получить ответ на этот вопрос, не найдя. Извините, если это звучит глупо или очевидно.
У меня есть приложение nodejs, и в основном я хотел бы просто получить разрешение видео. Представьте, что у меня есть фильм, хранящийся на диске, и я хотел бы узнать, записан ли он в формате 720p, 1080p или где-либо еще.
Я понял, что мне может понадобиться использовать ffmpeg для этого, но потом я также понял, что ffmpeg в основном использовался для "записи, конвертации и потоковой передачи аудио и видео файлов". Это не значит восстановить разрешение видео.
Спасибо за помощь
Редактирование 1: приложение node.js является настольным приложением и должно быть переносимым на Linux, Windows и OS X. Если это возможно, переносимый ответ был бы более ценным, но, конечно, любой ответ приветствуется.
3 ответа
Честно говоря, я думаю, что лучший способ, который я нашел, это использовать 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);
}
});
Есть npm
пакет называется get-video-dimensions
которые также используют 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);
Я использую 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
});
fileMetaData будет иметь ширину, высоту, информацию о кодеке, соотношение сторон и т. д.
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 и т. д.). Пример fileName: /path/to/video.mp4 или http://example.com/video.mp4
Один из способов сделать это - запустить другое приложение как дочерний процесс и получить разрешение от std out. Я не знаю ни о каком чистом решении node.js для этого.
Увидеть child_process.exec
https://nodejs.org/api/child_process.html
а также ffprobe
Как я могу получить разрешение (ширину и высоту) для видеофайла из командной строки Linux?