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