我可以使用节点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流从更大的文件构建音频片段吗?
答案 0 :(得分:1)
不需要特定数量的字节。 MP4使用类似索引的结构来组织文件。如果根本修改文件,则需要完整地重写索引(称为moov框)。