首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用iojs速递和fluent-ffmpeg

使用iojs速递和fluent-ffmpeg
EN

Stack Overflow用户
提问于 2015-05-08 17:53:42
回答 1查看 647关注 0票数 0

我正在尝试创建一个简单的io.js,它将读取opus文件,将其转换为mp3,并使用express将其传递到网页。以下是我到目前为止尝试过的:

代码语言:javascript
复制
var express = require('express');
var ffmpeg = require('fluent-ffmpeg');
var app = express();
var fs = require('fs');

app.get ('/ffmpegTest', function(req,res) {
      var stream = fs.createWriteStream('tester.mp3'); 
      ffmpeg('./tester.opus')
         .audioCodec('libmp3lame')
         .output(stream, {end:true})
            // tested to make sure it worked .saveToFile('./testerTEST.mp3')
          .on('error', function(err) {
              console.log('Processing error! ' + err);
          })  ;
 });

 var server = app.listen(3000, function() {
    var host = server.address().address;
    var port = server.address().port;
    console.log('Example app listening at http://%s:%s', host, port);
 });

我也尝试了这个网站的例子(这只是一个猜测)

代码语言:javascript
复制
var command = ffmpeg('./tester.opus')
    .audioCodec('libmp3lame')
    .on('error', function(err) {
         console.log('Processing error! ' + err);
    })  ;
 var ffstream = command.pipe();
 ffstream.on('data', function(chunk) {
    console.log('ffmpeg just wrote ' + chunk.length + ' bytes');
 });

这两个例子都给出了“用代码1退出的ffmpeg”。当我尝试使用"saveToFile“并编写一个测试mp3文件时,它工作得很好。

有没有更简单或更好的方法来做到这一点?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-08 23:17:09

下面是一个基于user33946建议的工作解决方案(如下所示)。如果可能的话,我还是宁愿用流利的东西。

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

'use strict;'

var app = express();


app.get ('/ffmpegTest/:formatType/', function(req, res) {
    var formatType   = req.params.formatType    ;
    var inputFile    = req.query.inputFile    ;

    console.log('formatType = ' + formatType);
    console.log('inputFile = ' + inputFile);

    var cmd = '/usr/local/bin/ffmpeg'
        + ' -i '
        + inputFile
        + ' -f '
        + formatType
        + ( formatType == 'mp3' ?  ' -codec:a libmp3lame ' : '' )
        + ' -;'
        ;

    var result = childProcess.exec
        (    cmd
        ,    { 'encoding'  : 'binary
             , 'maxBuffer' : 1024 * 500
             }
        ,    function (error, stdout, stderr) {
                if  (error) {
                    console.log(error.stack);
                    console.log('Child Process STDERR: ' + stderr);
                    console.log('Error code: ' + error.code);
                    console.log('Signal received: ' + error.signal);
                } else {
                    res.setHeader
                        ( 'Content-Disposition'
                        ,    'attachment; filename='
                            + path.basename(inputFile, path.extname(inputFile))
                            + '.'
                            + formatType
                        );
                    res.setHeader('Content-Type', 'audio/' + formatType );
                    res.setHeader('Content-Length', stdout.length );
                    res.end(new Buffer(stdout, 'binary'));
                    console.log('result length: ' + stdout.length);
                }
            }
        );

    result.on('exit', function (code) {
        console.log('Child process exited with exit code ' + code );
    });
});

var server = app.listen(3000, function() {
  var host = server.address().address;
  var port = server.address().port;
  console.log('Example app listening at http://%s:%s', host, port);
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30129935

复制
相关文章

相似问题

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