我使用node.js並通過socket.io庫,我收到的數據實際上是jpeg圖像的大塊。這些圖像是從遠程攝像頭捕獲的實時視頻幀。我不得不將視頻以JPEG格式流式傳輸。我正在尋找一種方式來將這些jpeg圖像轉換爲視頻文件(mpeg 4或mjpeg文件)。節點是否有可以做到這一點的庫?我已經看了一下Node-fluent-FFMPEG庫,但只給出了關於將jpeg文件轉換爲視頻的示例,而不是從jpeg圖像流中實時轉換。或者,ffmpeg for windows支持jpeg圖像流作爲輸入嗎?Node.js:從jpeg圖像到視頻文件的實時轉換
12
A
回答
0
使用require("child_process")
您可以使用ffmpeg,或者可能有npm模塊來幫助完成此操作。 ffmpeg將允許您首先獲取jpeg列表並將其轉換爲視頻,然後您可以添加一個列表(或僅一個)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'));
這產生從該文件在一個'/path/to/input3.avi'
Readable stream。
我對FFMPEG一無所知,但是您可以從socket.io(消息may be a Buffer已經發送)中提取消息,並用您自己的Readable stream實現。
相關問題
- 1. Node.js&avconv - 實時視頻轉換
- 2. aspx到jpeg圖像轉換
- 3. 使用FFMPEG從圖像和音頻文件轉換視頻
- 4. 轉換圖像文件爲JPEG
- 5. FFMPEG H.264到JPEG實時視頻
- 6. 如何將jpeg圖像序列轉換爲視頻格式?
- 7. 實時視頻流轉換
- 8. 從720p到480p的視頻轉換JPEG - FPGA
- 9. 從AppleScript中的PDF文件轉換爲JPEG圖像
- 10. ffmpeg將視頻轉換爲圖像,同時正在編寫視頻文件
- 11. 從ROS轉換實況圖像的Gstreamer視頻
- 12. 轉換視頻爲mp3 node.js
- 13. 如何將圖像實時批量轉換成mp4視頻文件?
- 14. 轉換J2C(Jpeg 2000)圖像爲JPEG
- 15. 遞歸轉換.jpeg圖像
- 16. 將MicrosoftOffice Docs + PDF +圖像++音頻/視頻轉換爲SWF文件
- 17. 將jpeg圖像轉換爲vti圖像文件
- 18. 轉換jpeg圖像墊到tiff
- 19. 將視頻文件字節[]或緩衝區轉換爲Android的位圖,從視頻文件獲取圖像
- 20. 將視頻轉換爲JPEG雪碧
- 21. gstreamer圖像到實時視頻
- 22. 將GridView Matter轉換爲像.jpeg這樣的圖像文件
- 23. 將圖像轉換爲視頻文件,同時保持相同的文件名?
- 24. 轉換DICOM圖像JPEG圖像
- 25. 從配置文件圖像切換到基礎視頻
- 26. 圖像到視頻 - 轉換爲IplImage使視頻藍色
- 27. 從Node.js下載實時流式視頻
- 28. 轉換圖像序列的視頻文件的Android的Java
- 29. 將圖像轉換爲Android中的單個視頻文件
- 30. 將視頻文件轉換爲等長的圖像序列?
我真的沒有答案給你,但我懷疑你將不得不緩衝圖像並將它們編碼成塊 - 大多數編碼算法需要很多幀才能獲得基本的壓縮。 我真的不知道你的用例,所以也許壓縮並不重要。也許webRTC是你的選擇? –
它是否必須是視頻,例如,您不能在畫布上繪製jpeg幀嗎? –