在nodejs中使用writeStream组合文件

时间:2016-01-18 18:50:49

标签: javascript node.js video fs file-writing

我正在尝试将几个.mp4视频文件合并为一个。我假设,我可以将它们附加到writeStream,就像我们使用普通文件一样。我想同步这样做。我的文件名为1.mp42.mp4,依此类推。如果我有n个此类文件,则执行此代码:

 var combineFiles = function(len,cur,ext){
 if(cur <= len)
  {
    var r = fs.createReadStream('videos/'+cur+'.'+ext);
    r.pipe(fs.createWriteStream('videos/compilation.'+ext, { flags: 'a'}))
    .on('finish', function(){combineFiles(len,cur+1,ext);});

  }
  else if(cur == len+1)
     console.log("Compilation successful!");
 };


 combineFiles(n,1,"mp4"); //n is the total number of files, 1 is the starting file name, and mp4 is the extension

所以我听finish事件确认文件写操作结束,然后再次调用这个递归函数。

我看到组合文件的大小大致是合并的单个文件的总和,但我无法在任何媒体播放器上播放。只播放n中的第一个视频。因此,如果第一个视频是15秒,我有10个这样的文件,那么最终文件就是这10个组合的大小;但是,持续时间仅为15秒,只有在媒体播放器中播放时才会看到第一个视频。

我希望我能够正确解释我的问题。我在这做错了什么?如何检查文件是否正确组合以及它们是否以任何方式损坏。另外,我希望我可以使用writeStreamreadStream来合并mp4文件。

感谢任何帮助。

0 个答案:

没有答案