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(); }