2014-04-20 52 views
1

完全按照文档,我试图用一个流写入视频转换为文件。节点流利ffmpeg流输出错误代码1

var FFmpeg = require('fluent-ffmpeg'); 
var fs = require('fs'); 

var outStream = fs.createWriteStream('C:/Users/Jack/Videos/test.mp4'); 

new FFmpeg({ source: 'C:/Users/Jack/Videos/video.mp4' }) 
    .withVideoCodec('libx264') 
    .withAudioCodec('libmp3lame') 
    .withSize('320x240') 
    .on('error', function(err) { 
     console.log('An error occurred: ' + err.message); 
    }) 
    .on('end', function() { 
     console.log('Processing finished !'); 
    }) 
    .writeToStream(outStream, { end: true }); 

这种转换工作完全当我使用.saveToFile(),但返回

发生错误:ffmpeg的代码为1

当我运行这段代码退出。我在Windows 8.1 64位上使用从here构建的64位ffmpeg。

回答

6

今天我有同样的问题(以及在同一平台上也)

这是当你流,你必须指定格式等,但是,因为它不是有效

我结束了,你不能指定MP4这,我认为这是一个很好的解决方法,我希望它可以帮助:

var input_file = fs.createReadStream(path); 
input_file.on('error', function(err) { 
    console.log(err); 
}); 

var output_path = 'tmp/output.mp4'; 
var output_stream = fs.createWriteStream('tmp/output.mp4'); 

var ffmpeg = child_process.spawn('ffmpeg', ['-i', 'pipe:0', '-f', 'mp4', '-movflags', 'frag_keyframe', 'pipe:1']); 
input_file.pipe(ffmpeg.stdin); 
ffmpeg.stdout.pipe(output_stream); 

ffmpeg.stderr.on('data', function (data) { 
    console.log(data.toString()); 
}); 

ffmpeg.stderr.on('end', function() { 
    console.log('file has been converted succesfully'); 
}); 

ffmpeg.stderr.on('exit', function() { 
    console.log('child process exited'); 
}); 

ffmpeg.stderr.on('close', function() { 
    console.log('...closing time! bye'); 
}); 
+0

非常感谢!这工作得很好。 – Harangue

+0

一个几乎毫不相关的问题 - 你知道我该如何通过node-webkit将该流传输到HTML5视频元素? – Harangue

1

我在Debian上有同样的问题。问题是,只有avconv与ffmpeg后备,但库fluent-ffmpeg调用ffmpeg -encoders,以“”结尾缺少选项'编码器'“的参数。 Avconv只有avconv -codecs

所以安装正确的ffmpeg软件包应该有所帮助。

(或更改flunt-的ffmpeg库代码不调用-encoders但-codecs,输出格式稍有不同)

PS:同样的脚本在Windows上做的非常出色

0

尝试更新上的ffmpeg你的机器。我有2.8和我有同样的错误。它在更新到3.0后可以正常工作。