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