使用Node js创建MP4剪辑

时间:2018-05-07 23:13:01

标签: node.js video-streaming streaming

我可以使用节点js流从mp4视频创建视频片段吗?我确信这个任务有npms,但是这可以用流来完成吗?

当我创建服务器时,我可以将视频开头的简短剪辑管道传输到 HttpResponse流,并使用以下代码将其传输到文件流 :(它有效!)

const fs = require('fs');
const http= require('http');

http.createServer(async (req, res) => {

  // Creating clip from the beginning to 5% of the video
  var { size } = fs.statSync('./Fun.mp4');
  var start = 0
  var end = .05*size;

  var videoClip = fs.createReadStream('./Fun.mp4', { start, end })
  var fileCopy = fs.createWriteStream('./Fun-Copy.mp4')

  res.writeHead(200, {'Content-Type': 'video/mp4'})
  videoClip.pipe(res)
  videoClip.pipe(fileCopy)

}).listen(3000);

但是,如果我将开始位置更改为视频的中间位置,则无效。我没有在Web浏览器中看到剪辑,Qucktime无法播放生成的副本。

// Attempting to create a clip from 50% to 60% of the video
var { size } = fs.statSync('./Fun.mp4');
var start = 0.5*size;
var end = 0.6*size;

似乎mp4在没有开头的情况下是不完整的。有没有办法可以用更大的视频文件创建带有流的剪辑。是否有一些元元素或某些东西,或者需要从mp4文件的开头复制的特定字节数?

节点js是否以相同的方式处理音频?我可以使用节点js流从更大的文件构建音频片段吗?

1 个答案:

答案 0 :(得分:1)

不需要特定数量的字节。 MP4使用类似索引的结构来组织文件。如果根本修改文件,则需要完整地重写索引(称为moov框)。