Как преобразовать видео Uint8Array в кадры в nodejs

Я хочу иметь возможность извлекать jpeg из массива Uint8, содержащего данные для видео в формате mpeg или avi.

Модуль ffmpeg имеет функцию fnExtractFrameToJPG, но принимает только имя файла, указывающее на видеофайл. Я хочу иметь возможность извлекать кадры из UInt8Array.


person dopplesoldner    schedule 27.11.2018    source источник


Ответы (1)


Один из способов сделать это — записать 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.

person christegho    schedule 27.11.2018