
该功能主要是借助了ffmpeg这个库实现
该项目是由vite+vue3创建的
首先进行ffmpeg安装
yarn add @ffmpeg/ffmpeg @ffmpeg/core使用
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))
} await ffmpeg.run('-r', '30', '-f', 'image2', '-i', '%d.png', 'video.mp4') 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