【问题标题】:ffmpeg jpeg stream to webm only creates a file .webm with 1 frame (snapshot) or empty .webm file (mjpeg)ffmpeg jpeg 流到 webm 只创建一个文件 .webm 与 1 帧(快照)或空 .webm 文件(mjpeg)
【发布时间】:2017-03-26 09:48:28
【问题描述】:

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

var fs = require('fs');
var path = require('path');

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

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

//var proc = new ffmpeg({source:'http://xxx.xxx.xxx.xxx/goform/stream?cmd=get&channel=0',timeout:0})

这是一个快照 URL。它会生成一个单帧文件。

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)

我尝试用管道代替但没有骰子:(

//.pipe(outStream,{end:false});
.writeToStream(outStream,{end:false})

感谢任何帮助。

在这一点上,我准备使用带有 exec 的基本 shell 命令,但是当我尝试这样做时,我也会得到错误。是的,不用说我是菜鸟。

旁注:

我尝试过 zoneminder 之类的东西,但它与我们的摄像头和摄像头数量无关。所以我正在制作一个简单的解决方案来记录它们。使用我们当前的云服务,我们错过了非常重要的时刻,并且在能源和时间上的成本更高。

【问题讨论】:

    标签: node.js ffmpeg jpeg mjpeg webm


    【解决方案1】:

    感谢所有看过并试图弄清楚的人:)

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

    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

    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);
    

    【讨论】:

      猜你喜欢
      • 2020-12-26
      • 1970-01-01
      • 1970-01-01
      • 2015-10-23
      • 2011-10-20
      • 1970-01-01
      • 2020-06-08
      • 1970-01-01
      • 2017-12-07
      相关资源
      最近更新 更多