Как конвертировать Uint8Array видео в кадры в nodejs - PullRequest
0 голосов
/ 27 ноября 2018

Я хочу иметь возможность извлекать JPEG из массива Uint8, содержащего данные для видео MPEG или AVI.

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

1 Ответ

0 голосов
/ 27 ноября 2018

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...