Vite + Vue项目使用@ffmpeg/ffmpeg
0.12.x版本踩坑笔记
ffmpegwasm项目github仓库有一个 vue-vite-app 模板,其中 components
目录下的 FFmpegDemo.vue
组件有示例代码,想要快速验证使用@ffmpeg/ffmpeg
建议把模版克隆下来启动。
安装
sh
npm install @ffmpeg/ffmpeg @ffmpeg/util @ffmpeg/core -D
sh
yarn add @ffmpeg/ffmpeg @ffmpeg/util @ffmpeg/core -D
sh
pnpm add @ffmpeg/ffmpeg @ffmpeg/util @ffmpeg/core -D
引用
javascript
<script setup>
import { FFmpeg } from '@ffmpeg/ffmpeg';
import { fetchFile, toBlobURL } from '@ffmpeg/util';
const videoURL = 'https://raw.githubusercontent.com/ffmpegwasm/testdata/master/video-15s.avi';//远程视频地址
const ffmpeg = new FFmpeg();
// 加载 ffmpeg 核心
const transcode = async () => {
ffmpeg.on('log', (e) => {
console.log(e.message);
});
await ffmpeg.load({
//coreURL 和 wasmURL 加载核心包 GitHub文档仓库的示例是加载CDN的,我们可以把包放到public目录
let coreURL = await toBlobURL('/public/static/esm/ffmpeg-core.js', 'text/javascript');
let wasmURL = await toBlobURL(`/public/static/esm/ffmpeg-core.wasm`, 'application/wasm');
await ffmpeg.load({
coreURL,
wasmURL
});
});
await ffmpeg.writeFile('test.avi', await fetchFile(videoURL));//将远程视频写入FFmpeg文件系统
await ffmpeg.exec(['-i', 'test.avi', 'test.mp4']);//FFmpeg输出视频
const data = await ffmpeg.readFile('test.mp4');// 读取生成的视频文件
const videoBlob = new Blob([videoData.buffer], { type: 'video/mp4' });
videoSrc = URL.createObjectURL(videoBlob);// 返回视频Blob的URL,可用于video标签的src属性
};
</script>
关键点
1.GitHub文档仓库的示例截图,我们根据关键点将本地代码稍做修改
2.关键的核心包位置,我们拷贝到public目录
