将视频Blob保存到文件系统电子/节点js

Nuz*_*zob 4 javascript video node.js electron

在我的电子应用程序中,用户可以使用MediaRecorder API从网络摄像头录制视频。

当用户点击“停止录制”按钮时,我得到了录制的视频的斑点。

我想做的就是将这个Blob转换为真实的webm视频,并将其写入用户的文件系统中,例如:

fs.writeFile(localdir + '\\video.webm', videoBlob); // does not work
Run Code Online (Sandbox Code Playgroud)

下面的示例非常适合我从网络摄像头获取的base64图像快照,但是我无法使其与我获取的视频blob一起使用。

谢谢赐教!

Jef*_*D23 21

另一种替代方法FileReader是通过 BlobarrayBuffer方法采用基于承诺的方法:

async function saveFile() {

    const blob = new Blob(chunks, {
        type: 'video/webm'
    })


    const buffer = Buffer.from( await blob.arrayBuffer() );

    fs.writeFile('video.webm', buffer, () => console.log('video saved!') );

}
Run Code Online (Sandbox Code Playgroud)


pos*_*abs 6

创建一个视频Blob。chunks是来自MediaRecorder实例的event.data的数组ondataavailable

var blob = new Blob(chunks, {
    type: 'video/webm'
})
Run Code Online (Sandbox Code Playgroud)

将blob读为ArrayBuffer,并使用它创建一个Buffer。将缓冲区另存为文件。

var reader = new FileReader()
reader.onload = function(){
    var buffer = new Buffer(reader.result)
    fs.writeFile(path, buffer, {}, (err, res) => {
        if(err){
            console.error(err)
            return
        }
        console.log('video saved')
    })
}
reader.readAsArrayBuffer(blob)
Run Code Online (Sandbox Code Playgroud)

  • Blob归档,对我有用,很好的答案 (3认同)
  • 我还必须在这里投反对票,因为虽然这确实是显而易见的解决方案,但它会强制将 Blob 数据读入内存,当您有几个小时的视频时,这可能并不完全温和(Blob 可能会或可能会根据浏览器的决定,它本身不会驻留在内存中,如果不是,则这样做会将其核弹到 RAM 中)。 (2认同)

dem*_*n85 0

您需要使用 FileReader 将 blob 内容读取为数组,然后创建 Buffer 实例。

但我无法让音频工作:(