如何使用节点js从上传的视频中提取帧?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (596)

我创建了用户上传视频的应用程序,我希望在nodejs中使用ffmpeg提取50个图像,但我在上传特定文件夹后无法获取该文件。我正在通过multer上传视频,因为它将视频存储在指定的文件夹中,然后我使用读取流读取该视频,但它没有提供有关该特定视频的正确信息。

Code:

var express = require('express');

var app = express();

var bodyParser = require('body-parser');

var path = require('path');

var multer = require('multer');

var cfenv = require('cfenv');

var watson = require('watson-developer-cloud');

var ffmpeg = require('ffmpeg');

app.use(bodyParser.json());

app.use(bodyParser.urlencoded({"extended": false}));

app.use(express.static(__dirname + '/public'));

var storage = multer.diskStorage({
    destination: function(req, file, callback){
        callback(null, './public/class'); // set the destination
    },
    filename: function(req, file, callback){
        callback(null, 199212+ '.avi'); // set the file name and extension
    }
});

var upload = multer({storage: storage});

 app.upload = upload;

 // get the app environment from Cloud Foundry
 var appEnv = cfenv.getAppEnv();

var VisualRecognitionV3 = require('watson-developer-cloud/visual-recognition/v3');

var fs = require('fs');


var visualRecognition = new VisualRecognitionV3({
  version: '2018-03-19',
  iam_apikey: 'aaIFu-fHWBXgj09eVarEQUFlIaTeH9bpgvRqHIJxu_8N'
});


app.post('/imgtable',app.upload.single('video-upl'),function(req,res){

    var video_file = fs.createReadStream(req.file.path);

 try {
    var process = new ffmpeg('./public/class/199212.avi');
    process.then(function (video) {
        // Video metadata
        console.log('******************************');
        console.log(video);
        // FFmpeg configuration
        console.log('*********************************');
        console.log(video.info_configuration);
    }, function (err) {
        console.log('Error: ' + err);
    });
} catch (e) {
    console.log(e.code);
    console.log(e.msg);
}


})

app.listen(3000);`
提问于
用户回答回答于

前辈不知您有考虑过把视频改为实时摄像视频流么

用户回答回答于

如果你使用的是ffmpeg npm软件包,只需使用fnExtractFrameToJPG函数进行一些调整即可:

try {
        var process = new ffmpeg(file);
        process.then(function (video) {
            video.fnExtractFrameToJPG("this/is/a/directory", {
                every_n_frames : 1
            }, myCallbackFunction())
        }, function (err) {
            console.log('Error: ' + err);
        });
    } catch (e) {
        console.log(e.code);
        console.log(e.msg);
    }

every_n_frames PARAM让你选择要提取一帧帧间隔。doc中提供了一些其他参数。

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励