我希望能够从包含mpeg或avi视频数据的Uint8数组中提取jpeg。
ffmpeg模块具有fnExtractFrameToJPG函数,但仅接受指向视频文件的文件名。我希望能够从UInt8Array中提取帧。
答案 0 :(得分:2)
一种实现方法是将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
文件。