web/ffmpeg: universal render function for all needs

This commit is contained in:
wukko 2024-08-11 13:04:40 +06:00
parent 7044100aed
commit 1113ddd9c5
No known key found for this signature in database
GPG key ID: 3E30B3F26C7B4AA2

View file

@ -4,6 +4,19 @@ import ffmpegCoreWASM from "@imput/ffmpeg-core/wasm?url";
import { FFmpeg } from "@imput/ffmpeg.wasm";
import { fetchFile } from "@imput/ffmpeg-util";
type renderParams = {
url: string,
input: {
type: string,
format: string,
},
output: {
type: string,
format: string,
},
args: string[],
}
export default class FFmpegWrapper {
initialized: boolean;
ffmpeg: FFmpeg;
@ -38,24 +51,24 @@ export default class FFmpegWrapper {
return this.ffmpeg.terminate();
}
async renderFile(url: string, type: string, format: string) {
const input = `input.${format}`;
async renderFile({ url, input, output, args }: renderParams) {
const inputFile = `input.${input.format}`;
await this.ffmpeg.writeFile(
input,
inputFile,
await fetchFile(url)
)
await this.ffmpeg.exec([
'-threads', this.concurrency.toString(),
'-i', input,
'-c', 'copy',
`output.${format}`
'-i', inputFile,
...args,
`output.${output.format}`
]);
const data = await this.ffmpeg.readFile(`output.${format}`);
const data = await this.ffmpeg.readFile(`output.${output.format}`);
const finalBlob = URL.createObjectURL(
new Blob([data], { type: `${type}/${format}` })
new Blob([data], { type: `${output.type}/${output.format}` })
);
return finalBlob