import { FFmpeg } from '@ffmpeg/ffmpeg'; import { fetchFile, toBlobURL } from '@ffmpeg/util'; import { createSignal, Show } from 'solid-js'; const baseURL = 'https://unpkg.com/@ffmpeg/core-mt@0.12.6/dist/esm'; const videoURL = 'https://raw.githubusercontent.com/ffmpegwasm/testdata/master/video-15s.avi'; export default function Home() { const [loaded, setLoaded] = createSignal(false); const [isLoading, setIsLoading] = createSignal(false); let ffmpegRef = new FFmpeg(); let videoRef: any = null; let messageRef: any = null; const load = async () => { setIsLoading(true); const ffmpeg = ffmpegRef; ffmpeg.on('log', ({ message }) => { if (messageRef) messageRef.innerHTML = message; }); // toBlobURL is used to bypass CORS issue, urls with the same // domain can be used directly. await ffmpeg.load({ coreURL: await toBlobURL(`${baseURL}/ffmpeg-core.js`, 'text/javascript'), wasmURL: await toBlobURL( `${baseURL}/ffmpeg-core.wasm`, 'application/wasm' ), workerURL: await toBlobURL( `${baseURL}/ffmpeg-core.worker.js`, 'text/javascript' ), }); setLoaded(true); setIsLoading(false); }; const transcode = async () => { const ffmpeg = ffmpegRef; // u can use 'https://ffmpegwasm.netlify.app/video/video-15s.avi' to download the video to public folder for testing await ffmpeg.writeFile('input.avi', await fetchFile(videoURL)); await ffmpeg.exec(['-i', 'input.avi', 'output.mp4']); const data = (await ffmpeg.readFile('output.mp4')) as any; if (videoRef) videoRef.src = URL.createObjectURL( new Blob([data.buffer], { type: 'video/mp4' }) ); }; return ( Load ffmpeg-core }>

); }