完全按照文档说明,我正在尝试使用流将视频转换写入文件。
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
当我运行此代码时。我使用here的64位ffmpeg版本在Windows 8.1 64位上。
答案 0 :(得分:8)
我今天遇到了同样的问题(也在同一平台上)
就像您在流式传输时必须指定格式但不能指定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');
});
答案 1 :(得分:1)
我在Debian上遇到了同样的问题。问题是,只有avconv与ffmpeg回退,但库fluent-ffmpeg称为 ffmpeg -encoders ,以“选项缺失参数'-encoders'结束” 。 Avconv只有 avconv -codecs 。
因此,安装正确的ffmpeg软件包应该会有所帮助。
(或更改flunt-ffmpeg库代码以调用非编码器但编码器,输出格式略有不同)
PS:相同的脚本在Windows上做得很好