// @ts-ignore
import createFFmpegCore from '@ffmpeg/core';
// @ts-ignore
import wasm from '../node_modules/@ffmpeg/core/dist/esm/ffmpeg-core.wasm';
import type { FFmpegCoreModule } from '@ffmpeg/types';
// for some reason, ffmpeg-core tries to access location.href...
(globalThis as any).location = { href: 'https://example.com' };
const mod = {
instantiateWasm: async (info: any, receiveInstance: any) => {
const instance = await WebAssembly.instantiate(wasm, info);
receiveInstance(instance);
}
};
const ffmpeg = await createFFmpegCore(mod) as FFmpegCoreModule;
export default {
async fetch(request: Request, env: Env, ctx: ExecutionContext): Promise<Response> {
const videoFile = new URL(request.url).searchParams.get('video')
?? 'https://raw.githubusercontent.com/ffmpegwasm/testdata/master/Big_Buck_Bunny_180_10s.webm';
const input = await fetch(videoFile);
ffmpeg.FS.writeFile('input.mp4', await input.bytes());
ffmpeg.exec('-i', 'input.mp4', '-vf', 'format=gray', 'output.mp4');
const output = ffmpeg.FS.readFile('output.mp4', { encoding: 'binary' });
ffmpeg.FS.unlink('input.mp4');
ffmpeg.FS.unlink('output.mp4');
return new Response(output, {
headers: {
'Content-Type': 'video/mp4',
},
});
},
};
// @ts-ignore
import createFFmpegCore from '@ffmpeg/core';
// @ts-ignore
import wasm from '../node_modules/@ffmpeg/core/dist/esm/ffmpeg-core.wasm';
import type { FFmpegCoreModule } from '@ffmpeg/types';
// for some reason, ffmpeg-core tries to access location.href...
(globalThis as any).location = { href: 'https://example.com' };
const mod = {
instantiateWasm: async (info: any, receiveInstance: any) => {
const instance = await WebAssembly.instantiate(wasm, info);
receiveInstance(instance);
}
};
const ffmpeg = await createFFmpegCore(mod) as FFmpegCoreModule;
export default {
async fetch(request: Request, env: Env, ctx: ExecutionContext): Promise<Response> {
const videoFile = new URL(request.url).searchParams.get('video')
?? 'https://raw.githubusercontent.com/ffmpegwasm/testdata/master/Big_Buck_Bunny_180_10s.webm';
const input = await fetch(videoFile);
ffmpeg.FS.writeFile('input.mp4', await input.bytes());
ffmpeg.exec('-i', 'input.mp4', '-vf', 'format=gray', 'output.mp4');
const output = ffmpeg.FS.readFile('output.mp4', { encoding: 'binary' });
ffmpeg.FS.unlink('input.mp4');
ffmpeg.FS.unlink('output.mp4');
return new Response(output, {
headers: {
'Content-Type': 'video/mp4',
},
});
},
};