Я использую node.js и через библиотеку socket.io Я получаю куски данных, которые на самом деле являются изображениями jpeg. Эти изображения представляют собой кадры видео в реальном времени, снятые с удаленной веб-камеры. Я вынужден передавать видео в виде jpeg-кадров. Я ищу способ конвертировать на лету эти jpeg-изображения в видеофайл (файл mpeg 4 или mjpeg). У узла есть библиотека, которая может это сделать? Я уже рассмотрел библиотеку Node-fluent-FFMPEG, но единственными приведенными примерами были конверсии jpeg-файлов в видео, а не преобразование «на лету» из потока jpeg-изображений. Или, наоборот, ffmpeg для Windows поддерживает поток jpeg-изображений в качестве входных данных?Node.js: преобразование в реальном времени из jpeg-изображений в видеофайл
12
A
ответ
0
Используя require("child_process")
, вы можете использовать ffmpeg или, возможно, модули npm, чтобы помочь в этом. ffmpeg позволит вам сначала взять список jpegs и преобразовать его в видео, во-вторых, вы можете добавить список (или только один) jpegs в начало или конец видео.
0
Я думаю, вы должны смотреть на videofy
var exec = require("child_process").exec;
var escape = require("shell-escape");
var debug = require("debug")("videofy");
var mkdirp = require("mkdirp");
var uid = require("uid2");
/*
* Expose videofy
*/
module.exports = videofy;
/**
* Convert `input` file to `output` video with the given `opts`:
*
* - `rate` frame rate [10]
* - `encoders` the video codec format, default is libx264
*
* @param {String} input
* @param {String} output
* @return
* @api public
*/
function videofy(input, output, opts, fn) {
if (!input) throw new Error('input filename required');
if (!output) throw new Error('output filename required');
var FORMAT = '-%05d';
// options
if ('function' == typeof opts) {
fn = opts;
opts = {};
} else {
opts = opts || {};
}
opts.rate = opts.rate || 10;
opts.codec = opts.codec || 'libx264';
// tmpfile(s)
var id = uid(10);
var dir = 'tmp/' + id;
var tmp = dir + '/tmp' + FORMAT + '.jpg';
function gc(err) {
debug('remove %s', dir);
exec('rm -fr ' + dir);
fn(err);
}
debug('mkdirp -p %s', dir);
mkdirp(dir, function(error) {
if (error) return fn(error);
// convert gif to tmp jpg
var cmd = ['convert', input, tmp];
cmd = escape(cmd);
debug('exec %s', cmd);
// covert jpg collection to video
exec(cmd, function(err) {
if (err) return gc(err);
var cmd = ['ffmpeg'];
cmd.push('-f', 'image2');
cmd.push('-r', String(opts.rate));
cmd.push('-i', tmp);
cmd.push('-c:v', String(opts.codec));
cmd.push(output);
cmd = escape(cmd);
debug("exec %s", cmd);
exec(cmd, gc);
});
});
}
0
FFMPEG поддерживает потоки как входы, как указано в docs.
Вы можете добавить любое количество входов в команду Ffmpeg. Вход может быть [...] читаемый поток
Так, например, он поддерживает использование
ffmpeg().input(fs.createReadStream('/path/to/input3.avi'));
, который создает Readable stream из файла в '/path/to/input3.avi'
.
Я ничего не знаю о FFMPEG, но вы можете вытаскивать сообщения из socket.io (сообщения may be a Buffer уже) и обернуть их собственной реализацией Readable stream.
Смежные вопросы
- 1. Node.js & avconv - преобразование видео в реальном времени
- 2. Сервер TCP в реальном времени в Node.JS
- 3. Уведомление в реальном времени с Node.JS, Angular.JS
- 4. Текст в реальном времени с использованием node.js
- 5. Сигналы Node.js и POSIX в реальном времени
- 6. Преобразование зарезервированного идентификатора заказа в реальном времени
- 7. Изменения в реальном времени в реальном времени
- 8. Обновление в реальном времени в реальном времени
- 9. Android Studio: Преобразование чисел в реальном времени
- 10. Игра в реальном времени Django в реальном времени
- 11. Фильтрация видео в реальном времени в реальном времени
- 12. Преобразование матрицы Matlab в видеофайл
- 13. Преобразование массива байтов в видеофайл
- 14. Получайте обновления в реальном времени в реальном времени в Kafka
- 15. Обновление данных в реальном времени в веб-узле Node.js
- 16. рукопожатие в Node.js 4.2.2 с MySQL данных в реальном времени
- 17. Как установить обновление в реальном времени в node.js
- 18. Запись в реальном времени Twilio
- 19. rails приложение в реальном времени
- 20. Обновление в реальном времени с php, node.js, express.js и socket.io
- 21. Обмен сообщениями в реальном времени
- 22. Подписки в реальном времени
- 23. Приложение в реальном времени Android
- 24. Обработка звука в реальном времени в реальном времени
- 25. Соберите данные в реальном времени в реальном времени facebook
- 26. Обновление в реальном времени GWT CEll в реальном времени
- 27. Обновления в реальном времени в реальном времени с сервера
- 28. Обмен сообщениями в реальном времени в реальном времени
- 29. не в реальном времени/не в реальном времени сортировка JTable
- 30. Размеры в реальном времени в qgraphicsscene
У меня на самом деле нет ответа для вас, но я подозреваю, что вам придется буферизовать изображения и закодировать их в кусках - для большинства алгоритмов кодирования требуется много кадров в последовательности, чтобы получить даже основное сжатие. Я действительно не знаю ваш случай использования, поэтому сжатие не имеет значения. Может быть, webRTC - это вариант для вас? –
Это должно быть видео, не могли бы вы нарисовать рамки jpeg на холсте, например? –