该功能主要是借助了ffmpeg
这个库实现
该项目是由vite vue3
创建的
首先进行ffmpeg
安装
yarn add @ffmpeg/ffmpeg @ffmpeg/core
使用
代码语言:javascript复制import FFmpeg from "@ffmpeg/ffmpeg"
const { createFFmpeg, fetchFile } = FFmpeg
const ffmpeg = createFFmpeg({ log: false })
await ffmpeg.load()
这时候浏览器会报错ReferenceError: SharedArrayBuffer is not defined
这是因为谷歌浏览器的安全策略机制改变了
解决
在vite.config.js
添加http头
,用localhost
打开
server: {
headers: {
"Cross-Origin-Embedder-Policy": "require-corp",
"Cross-Origin-Opener-Policy": "same-origin",
},
},
因为对上传进行单独的抽离
这里只展示ffmpeg
核心代码
for (let i in imgs.value) {
ffmpeg.FS('writeFile', `${i}.png`, await fetchFile(imgs.value[i].raw))
}
代码语言:javascript复制 await ffmpeg.run('-r', '30', '-f', 'image2', '-i', '%d.png', 'video.mp4')
代码语言:javascript复制 const data = ffmpeg.FS('readFile', 'video.mp4')
videoUrl.value = URL.createObjectURL(new Blob([data.buffer], { type: 'video/mp4' }))
更多源代码可以下载我的Github仓库
https://github.com/skywalk94/img-to-video