首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >到webm的ffmpeg jpeg流只创建带有1帧(快照)或空.webm文件(mjpeg)的文件.webm。

到webm的ffmpeg jpeg流只创建带有1帧(快照)或空.webm文件(mjpeg)的文件.webm。
EN

Stack Overflow用户
提问于 2016-11-12 06:39:24
回答 1查看 1.2K关注 0票数 0

我的问题是,当我试图将一系列的jpeg转换成webm视频时。我要么得到一个带有单个帧的webm文件,要么得到一个没有任何内容的webm文件(0 kb)。

代码语言:javascript
复制
var fs = require('fs');
var path = require('path');

var outStream = fs.createWriteStream(__dirname+'/output.webm');
var ffmpeg = require('fluent-ffmpeg');

这是一个mjpeg流URL。它生成一个没有任何内容的文件。

代码语言:javascript
复制
//var proc = new ffmpeg({source:'http://xxx.xxx.xxx.xxx/goform/stream?cmd=get&channel=0',timeout:0})

这是一个快照URL。它生成一个只有一个帧的文件。

代码语言:javascript
复制
var proc = new ffmpeg({source:'http://xxx.xxx.xxx.xxx/snapshot/view0.jpg',timeout:0})

.fromFormat('mjpeg')
.size('2048x1536')
.toFormat('webm')
.withVideoBitrate('800k')
.withFps(20)

我试过用管道代替,但没有骰子:

代码语言:javascript
复制
//.pipe(outStream,{end:false});
.writeToStream(outStream,{end:false})

任何帮助都是非常感谢的。

此时,我准备在exec中使用一个基本的shell命令,但当我尝试时,我也会得到错误。是的,不用说,我是个菜鸟。

旁注:

我试过像zoneminder这样的东西,但它只是打破了我们的相机和相机的数量。所以我要做一个简单的解决方案来记录它们。随着我们目前的云服务,我们正在错过非常重要的时刻,它的成本更多的能源和时间。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-14 05:20:16

谢谢每一个看了一眼并想弄清楚的人:)

我在这种方法上取得了一些成功。它实际上是关闭了快照URL,而不是MJPEG。它使用请求。但从技术上讲,您可以使用任何东西,因为该方法使用的是管道image2pipe.

代码语言:javascript
复制
var spawn = require('child_process').spawn;
var request = require('request');
var args = '-f image2pipe -r 1 -vcodec mjpeg -i - -f webm -r 1 test3.webm';
var encoder = spawn('ffmpeg', args.split(' '));
encoder.stderr.pipe(process.stdout);
var interval = function(){
    request('http://xxx.xxx.xxx.xxx/snapshot/view0.jpg',function(er){
        if(er){console.log(er)}
        setTimeout(function(){interval()},1000)
    }).pipe(encoder.stdin,{end:false})
}
interval();

我本可以使用setInterval,但我只希望它在完成请求后再试一次。

编辑:当我试图在最初的问题中使用这个方法时,我的相机被关掉了,所以我不确定它是否有效。但我知道这对MJPEG有帮助。

代码语言:javascript
复制
var spawn = require('child_process').spawn;
var args = '-f mjpeg -framerate 1 -i http://xxx.xxx.xxx.xxx/goform/stream?cmd=get&channel=0 -vcodec libvpx -framerate 1 -bitrate 256k video_file.webm -y';
console.log(args)
var encoder = spawn('ffmpeg', args.split(' '));
encoder.stderr.pipe(process.stdout);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40560255

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档