video到audio文件通过FFMPEG节点js转换和保存

我正在研究节点js上的FFMPEG。 我想使用节点js从video文件中检索音轨。 我也想保存这样的文件,但我不知道如何。

我虽然这行代码会帮助我:

ffmpeg('/path/to/file.avi').noVideo(); 

我在npm包里有这个。 我不太明白如何处理这个问题,以及如何保存audio文件。

其他一些代码:

 try { var process = new ffmpeg('/path/to/your_movie.avi'); process.then(function (video) { // Callback mode video.fnExtractSoundToMP3('/path/to/your_audio_file.mp3', function (error, file) { if (!error) console.log('Audio file: ' + file); }); }, function (err) { console.log('Error: ' + err); }); } catch (e) { console.log(e.code); console.log(e.msg); } 

我的问题是:

如何从FFMPEGvideo中检索audio? 我如何保存它?

我会这样做:

 var ffmpeg = require('fluent-ffmpeg'); /** * input - string, path of input file * output - string, path of output file * callback - function, node-style callback fn (error, result) */ function convert(input, output, callback) { ffmpeg(input) .output(output) .on('end', function() { console.log('conversion ended'); callback(null); }).on('error', function(err){ console.log('error: ', e.code, e.msg); callback(err); }).run(); } convert('./df.mp4', './output.mp3', function(err){ if(!err) { console.log('conversion complete'); //... } }); 

只要确保已经安装了ffmpeg并且是系统path的一部分,还要确保所有必要的代码都存在。

更新:

对于没有audio的video,只需做.noAudio().videoCodec('copy')

 function copyWitoutAudio(input, output, callback) { ffmpeg(input) .output(output) .noAudio().videoCodec('copy') .on('end', function() { console.log('conversion ended'); callback(null); }).on('error', function(err){ console.log('error: ', err); callback(err); }).run(); } 

更新2:

用于将video和audio合并为单个:

 function mergeMedia(aud, vid, output, callback) { ffmpeg() .input(aud) .input(vid) .output(output) .outputOptions( '-strict', '-2', '-map', '0:0', '-map', '1:0' ).on('end', function() { console.log('conversion ended'); callback(null); }).on('error', function(err){ console.log('error: ', err); callback(err); }).run(); }