1.引入fluent-ffmpeg
var ffmpeg = require('fluent-ffmpeg');
2.将n个webm文件重新编码 ,输入为“_i.webm”为 “i.webm”
function runFFmpegWebmS(roomId,length) { for(var i=0;i<length;i++){ runFFmpegWebm(roomId,i,length); } }
function runFFmpegWebm(roomId,i,length) { var fileName1 = path.join(__dirname, 'uploads',''+roomId,'webm','_'+i+'.webm').replace(/\/g,'/'); var fileName2 = path.join(__dirname, 'uploads',''+roomId,'webm',i+'.webm').replace(/\/g,'/'); ffmpeg(fileName1) .output(fileName2) .on('end', function() { console.log('视频转码Finished processing'); console.log("i:"+i+",length:"+length) if(i==length-1){ //这一步判断比较关键,当最后一个webm文件编码完成后调用合并的函数 console.log("视频转码全部完成"); runFFmpegCombine_Webm(roomId,length); } }) .run(); }
3.将新生成的n个webm视频文件合并
function runFFmpegCombine_Webm(roomId,length) { var file =path.join(__dirname, 'uploads',''+roomId,'webm','0.webm').replace(/\/g,'/'); var outPath = path.join(__dirname, 'uploads',''+roomId,'webm',roomId+'.webm').replace(/\/g,'/'); try{ var proc = ffmpeg(file); for(var i=1;i<length;i++){ proc=proc.input(path.join(__dirname, 'uploads',''+roomId,'webm',i+'.webm').replace(/\/g,'/')); } proc.mergeToFile(outPath).on('end', function() { console.log('视频合并成功'); }); }catch(err){ console.log( 'an error occured!',err ); } }