diff --git a/web/packages/gallery/package.json b/web/packages/gallery/package.json index f019ef1b28..60ddda020f 100644 --- a/web/packages/gallery/package.json +++ b/web/packages/gallery/package.json @@ -2,7 +2,9 @@ "name": "@/gallery", "version": "0.0.0", "private": true, - "dependencies": {}, + "dependencies": { + "@ffmpeg/ffmpeg": "^0.12.10" + }, "devDependencies": { "@/build-config": "*" } diff --git a/web/packages/new/photos/services/ffmpeg/worker.ts b/web/packages/new/photos/services/ffmpeg/worker.ts index 64574b23c7..b9a88aecf9 100644 --- a/web/packages/new/photos/services/ffmpeg/worker.ts +++ b/web/packages/new/photos/services/ffmpeg/worker.ts @@ -1,5 +1,6 @@ import log from "@/base/log"; import QueueProcessor from "@ente/shared/utils/queueProcessor"; +import { FFmpeg } from "@ffmpeg/ffmpeg"; import { expose } from "comlink"; import { ffmpegPathPlaceholder, @@ -24,17 +25,13 @@ import { // // eslint-disable-next-line @typescript-eslint/ban-ts-comment, @typescript-eslint/prefer-ts-expect-error // @ts-ignore -import { createFFmpeg, type FFmpeg } from "ffmpeg-wasm"; export class DedicatedFFmpegWorker { private ffmpeg: FFmpeg; private ffmpegTaskQueue = new QueueProcessor(); constructor() { - this.ffmpeg = createFFmpeg({ - corePath: "/js/ffmpeg/ffmpeg-core.js", - mt: false, - }); + this.ffmpeg = new FFmpeg(); } /** @@ -48,7 +45,16 @@ export class DedicatedFFmpegWorker { blob: Blob, outputFileExtension: string, ): Promise { - if (!this.ffmpeg.isLoaded()) await this.ffmpeg.load(); + if (!this.ffmpeg.loaded) { + await this.ffmpeg.load(); + + // this.ffmpeg = createFFmpeg({ + // corePath: "/js/ffmpeg/ffmpeg-core.js", + // mt: false, + // }); + + // await this.ffmpeg.load(); + } const request = this.ffmpegTaskQueue.queueUpRequest(() => ffmpegExec(this.ffmpeg, command, outputFileExtension, blob), @@ -77,22 +83,23 @@ const ffmpegExec = async ( try { const startTime = Date.now(); - ffmpeg.FS("writeFile", inputPath, inputData); - await ffmpeg.run(...cmd); + await ffmpeg.writeFile(inputPath, inputData); + await ffmpeg.exec(cmd); - const result = ffmpeg.FS("readFile", outputPath); + const result = await ffmpeg.readFile(outputPath); + if (typeof result == "string") throw new Error("Expected binary data"); const ms = Date.now() - startTime; log.debug(() => `[wasm] ffmpeg ${cmd.join(" ")} (${ms} ms)`); return result; } finally { try { - ffmpeg.FS("unlink", inputPath); + ffmpeg.deleteFile(inputPath); } catch (e) { log.error(`Failed to remove input ${inputPath}`, e); } try { - ffmpeg.FS("unlink", outputPath); + ffmpeg.deleteFile(outputPath); } catch (e) { log.error(`Failed to remove output ${outputPath}`, e); } diff --git a/web/yarn.lock b/web/yarn.lock index 37ce68211b..d3fbe04dee 100644 --- a/web/yarn.lock +++ b/web/yarn.lock @@ -217,7 +217,7 @@ source-map "^0.5.7" stylis "4.2.0" -"@emotion/cache@11.13.1", "@emotion/cache@^11.11.0", "@emotion/cache@^11.13.0", "@emotion/cache@^11.4.0": +"@emotion/cache@^11.11.0", "@emotion/cache@^11.13.0", "@emotion/cache@^11.4.0": version "11.13.1" resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.13.1.tgz#fecfc54d51810beebf05bf2a161271a1a91895d7" integrity sha512-iqouYkuEblRcXmylXIwwOodiEK5Ifl7JcX7o6V4jI3iW4mLXX3dmt5xwBtIkJiQEXFAI+pC8X0i67yiPkH9Ucw== @@ -245,7 +245,7 @@ resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.9.0.tgz#745969d649977776b43fc7648c556aaa462b4102" integrity sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ== -"@emotion/react@11.13.3", "@emotion/react@^11.13.3", "@emotion/react@^11.8.1": +"@emotion/react@11.13.3", "@emotion/react@^11.8.1": version "11.13.3" resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.13.3.tgz#a69d0de2a23f5b48e0acf210416638010e4bd2e4" integrity sha512-lIsdU6JNrmYfJ5EbUCf4xW1ovy5wKQ2CkPRM4xogziOxH1nXxBSjpC9YqbFAP7circxMfYp+6x676BqWcEiixg== @@ -487,6 +487,18 @@ dependencies: levn "^0.4.1" +"@ffmpeg/ffmpeg@^0.12.10": + version "0.12.10" + resolved "https://registry.yarnpkg.com/@ffmpeg/ffmpeg/-/ffmpeg-0.12.10.tgz#e3cce21f21f11f33dfc1ec1d5ad5694f4a3073c9" + integrity sha512-lVtk8PW8e+NUzGZhPTWj2P1J4/NyuCrbDD3O9IGpSeLYtUZKBqZO8CNj1WYGghep/MXoM8e1qVY1GztTkf8YYQ== + dependencies: + "@ffmpeg/types" "^0.12.2" + +"@ffmpeg/types@^0.12.2": + version "0.12.2" + resolved "https://registry.yarnpkg.com/@ffmpeg/types/-/types-0.12.2.tgz#bc7eef321ae50225c247091f1f23fd3087c6aa1d" + integrity sha512-NJtxwPoLb60/z1Klv0ueshguWQ/7mNm106qdHkB4HL49LXszjhjCCiL+ldHJGQ9ai2Igx0s4F24ghigy//ERdA== + "@floating-ui/core@^1.6.0": version "1.6.7" resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.6.7.tgz#7602367795a390ff0662efd1c7ae8ca74e75fb12"