Open6
ffmpeg.wasmをブラウザで使う

index.html に 以下追加
<script src="//cdn.jsdelivr.net/npm/@ffmpeg/ffmpeg@0.10.1/dist/ffmpeg.min.js"></script>

型が欲しいので @ffmpeg/mpeg
から持ってきてみる。
yarn add --dev @ffmpeg/ffmpeg
import type { createFFmpeg, fetchFile } from "@ffmpeg/ffmpeg";
declare global {
interface File {
path: string;
}
interface Window {
FFmpeg: {
createFFmpeg: typeof createFFmpeg;
fetchFile: typeof fetchFile;
};
}
}
console.log(window.FFmpeg.createFFmpeg())
をしてみてランタイムで動きつつ型も取れてるので良さそう

ViteのdevサーバーでheaderつけないとSharedArrayBuffer が使えないのでセットする。
vite.config.ts
import { defineConfig } from "vite";
import react from "@vitejs/plugin-react";
// https://vitejs.dev/config/
export default defineConfig({
plugins: [
react(),
{
name: "configure-response-headers",
configureServer: (server) => {
server.middlewares.use((_req, res, next) => {
res.setHeader("Cross-Origin-Embedder-Policy", "require-corp");
res.setHeader("Cross-Origin-Opener-Policy", "same-origin");
next();
});
},
},
],
});

headerつけた影響でCDNからのjsロードができなくなるのでローカルに配置する。

公式のexample参考に実装