2014-04-20 54 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後可以正常工作。