如何将Uint8Array视频转换为Node.js中的帧

时间:2018-11-27 13:23:52

标签: node.js video ffmpeg

我希望能够从包含mpeg或avi视频数据的Uint8数组中提取jpeg。

ffmpeg模块具有fnExtractFrameToJPG函数,但仅接受指向视频文件的文件名。我希望能够从UInt8Array中提取帧。

1 个答案:

答案 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。另一种解决方案是使用streamffmpeg-fluent,而无需使用tmp文件。