From 0399080d6ec8c3e7d4f7431e8c8103303ec73274 Mon Sep 17 00:00:00 2001 From: Mylloon Date: Thu, 22 Aug 2024 17:47:21 +0200 Subject: [PATCH] if no compression is needed, optimize for streaming --- src/main.ts | 25 ++++++++++++++++++++++--- src/preload.ts | 1 + src/scripts/renderer.ts | 6 ++++++ 3 files changed, 29 insertions(+), 3 deletions(-) diff --git a/src/main.ts b/src/main.ts index 8dda4c8..89a320b 100644 --- a/src/main.ts +++ b/src/main.ts @@ -26,7 +26,7 @@ const metadataAudio = `-metadata:s:a:0 title="System sounds and microphone" \ -metadata:s:a:1 title="System sounds" \ -metadata:s:a:2 title="Microphone"`; -const extraArgs = "-movflags +faststart"; +const shareOpt = "-movflags +faststart"; /** Register a new error */ const registerError = (win: BrowserWindow, err: string) => { @@ -109,7 +109,6 @@ app.whenReady().then(() => { -map 0 -map 1:a -c:v copy \ -disposition:a 0 -disposition:a:0 default \ ${metadataAudio} \ - ${extraArgs} \ "${outFile}"` ).catch((e) => registerError(win, e)); @@ -185,7 +184,7 @@ app.whenReady().then(() => { -c:v ${codec} -b:v ${videoBitrate}k -pass 2 -c:a copy \ ${mappingTracks} -f mp4 \ ${metadataAudio} \ - ${extraArgs} \ + ${shareOpt} \ "${finalFile}"` ).catch((e) => registerError(win, e)); @@ -198,6 +197,25 @@ app.whenReady().then(() => { return finalFile; }; + /** Move metadata at the begenning of the file */ + const moveMetadata = async (file: string) => { + const finalFile = getNewFilename(file, "Shareable - "); + + // Optimize for streaming + await execute( + `"${ffmpegPath}" -y \ + -i "${file}" \ + -map 0 -codec copy \ + ${shareOpt} \ + "${finalFile}"` + ).catch((e) => registerError(win, e)); + + // Delete the old video file + deleteFile(file); + + return finalFile; + }; + /* Context bridge */ ipcMain.handle("argv", () => process.argv); ipcMain.handle("allowedExtensions", () => moviesFilter); @@ -209,6 +227,7 @@ app.whenReady().then(() => { (_, file: string, bitrate: number, nbTracks: number) => reduceSize(file, bitrate, nbTracks) ); + ipcMain.handle("moveMetadata", (_, file: string) => moveMetadata(file)); ipcMain.handle("exit", () => (error ? {} : app.quit())); ipcMain.handle("confirmation", (_, text: string) => confirmation(text)); }); diff --git a/src/preload.ts b/src/preload.ts index 0e0f477..e14b9a6 100644 --- a/src/preload.ts +++ b/src/preload.ts @@ -15,6 +15,7 @@ contextBridge.exposeInMainWorld("internals", { mergeAudio: (file: string) => ipcRenderer.invoke("mergeAudio", file), reduceSize: (file: string, bitrate: number, nbTracks: number) => ipcRenderer.invoke("reduceSize", file, bitrate, nbTracks), + moveMetadata: (file: string) => ipcRenderer.invoke("moveMetadata", file), exit: () => ipcRenderer.invoke("exit"), confirmation: (text: string) => ipcRenderer.invoke("confirmation", text), }); diff --git a/src/scripts/renderer.ts b/src/scripts/renderer.ts index 7e32fad..8c4e82f 100644 --- a/src/scripts/renderer.ts +++ b/src/scripts/renderer.ts @@ -18,6 +18,7 @@ let internals: { bitrate: number, nbTracks: number ) => Promise; + moveMetadata: (file: string) => Promise; confirmation: (text: string) => Promise; }; @@ -133,6 +134,11 @@ const main = async () => { bitrate, newFile.nbTracks ); + } else { + updateMessage(`\nPréparation pour le partage...`, true, Mode.Append); + + // Move the metadata to make it playable before everything is downloaded + finalTitle = await internals.moveMetadata(newFile.title); } // Append title to the list of processed files