Один из способов сделать это - записать массив UInt8Array в файл tmp
, а затем использовать файл tmp
с ffmpeg
для извлечения кадров:
const tmp = require("tmp");
const ffmpeg_ = require("ffmpeg");
function convert_images(video_bytes_array){
var tmpobj = tmp.fileSync({ postfix: '.avi' })
fs.writeFileSync(tmpobj.name, video_bytes_array);
try {
var process = new ffmpeg(tmpobj.name);
console.log(tmpobj.name)
process.then(function (video) {
// Callback mode
video.fnExtractFrameToJPG('./', { // make sure you defined the directory where you want to save the images
frame_rate : 1,
number : 10,
file_name : 'my_frame_%t_%s'
}, function (error, files) {
if (!error)
tmpobj.removeCallback();
});
});
} catch (e) {
console.log(e.code);
console.log(e.msg);
}
}
Другая возможность заключается в использованииopencv
после сохранения UInt8Array
в tmp
файле.Другое решение заключается в использовании stream
и ffmpeg-fluent
, что не потребует использования tmp
файлов.