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