feat: additional coders

This commit is contained in:
Maya 2026-03-01 12:30:36 +03:00
parent ffb6ef856b
commit 1bf93d9a22
No known key found for this signature in database
3 changed files with 25 additions and 1 deletions

View File

@ -12,6 +12,8 @@
"@fontsource/lexend": "^5.2.11",
"@fontsource/radio-canada-big": "^5.2.7",
"@imagemagick/magick-wasm": "^0.0.37",
"@mediabunny/ac3": "^1.35.1",
"@mediabunny/mp3-encoder": "^1.35.1",
"@stripe/stripe-js": "^8.5.2",
"byte-data": "^19.0.1",
"client-zip": "^2.5.0",
@ -176,6 +178,10 @@
"@lix-js/server-protocol-schema": ["@lix-js/server-protocol-schema@0.1.1", "", {}, "sha512-jBeALB6prAbtr5q4vTuxnRZZv1M2rKe8iNqRQhFJ4Tv7150unEa0vKyz0hs8Gl3fUGsWaNJBh3J8++fpbrpRBQ=="],
"@mediabunny/ac3": ["@mediabunny/ac3@1.35.1", "", { "peerDependencies": { "mediabunny": "^1.0.0" } }, "sha512-gLx3mFfs58/cdz2/f5Fp+6ZOrX5Jli3AZMXw/5EJcgm2VpnC/2oxtJyP1x/00PIS4UCE770slwIdz7U+2CQ31g=="],
"@mediabunny/mp3-encoder": ["@mediabunny/mp3-encoder@1.35.1", "", { "peerDependencies": { "mediabunny": "^1.0.0" } }, "sha512-iY6FcPs7GbHMs/ASPmdzwojKcBN4AfMa+zFh4KNZNaLToyR7aEZILj9FsPVJA11bshaoo80dTaBcn69i33JHVA=="],
"@nodelib/fs.scandir": ["@nodelib/fs.scandir@2.1.5", "", { "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g=="],
"@nodelib/fs.stat": ["@nodelib/fs.stat@2.0.5", "", {}, "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="],

View File

@ -45,6 +45,8 @@
"@fontsource/lexend": "^5.2.11",
"@fontsource/radio-canada-big": "^5.2.7",
"@imagemagick/magick-wasm": "^0.0.37",
"@mediabunny/ac3": "^1.35.1",
"@mediabunny/mp3-encoder": "^1.35.1",
"@stripe/stripe-js": "^8.5.2",
"byte-data": "^19.0.1",
"client-zip": "^2.5.0",

View File

@ -2,6 +2,7 @@ import { VertFile } from "$lib/types";
import {
BlobSource,
BufferTarget,
canEncodeAudio,
Conversion,
Input,
MATROSKA,
@ -16,6 +17,8 @@ import {
WEBM,
WebMOutputFormat,
} from "mediabunny";
import { registerMp3Encoder } from "@mediabunny/mp3-encoder";
import { registerAc3Decoder, registerAc3Encoder } from "@mediabunny/ac3";
import { Converter, FormatInfo, type WorkerStatus } from "./converter.svelte";
import { ToastManager } from "$lib/util/toast.svelte";
import { error, log } from "$lib/util/logger";
@ -43,6 +46,19 @@ export class MediabunnyConverter extends Converter {
constructor() {
super();
// additional mediabunny coders
// currently both official ones -- maybe add our own in the future
this.initializeCodecs();
}
private async initializeCodecs(): Promise<void> {
if (!(await canEncodeAudio("mp3"))) {
// Only register the custom encoder if there's no native support
registerMp3Encoder();
}
registerAc3Decoder();
registerAc3Encoder();
}
public async convert(file: VertFile, to: string): Promise<VertFile> {
@ -114,7 +130,7 @@ export class MediabunnyConverter extends Converter {
case ".mov":
return new MovOutputFormat();
case ".ts":
return new MpegTsOutputFormat();
return new MpegTsOutputFormat(); // FIXME: audio tracks discarded - prob needs another audio codec
default:
throw new Error(`Unsupported format: ${ext}`);
}