diff --git a/assets/css/index.css b/assets/css/index.css index b140396..afe7959 100644 --- a/assets/css/index.css +++ b/assets/css/index.css @@ -733,7 +733,7 @@ body::-webkit-scrollbar-thumb { .container { max-width: 800px; - margin: 0 auto 10px auto; + margin: 30px auto 10px auto; background: var(--box-main); padding: 30px; border-radius: 8px; @@ -778,7 +778,7 @@ body::-webkit-scrollbar-thumb { } #output-folder-box { - background-color: var(--item-bg); + background-color: var(--box-toggle); margin-bottom: 12px; padding: 15px; border-radius: 8px; diff --git a/html/compressor.html b/html/compressor.html index 67bd95a..416d327 100644 --- a/html/compressor.html +++ b/html/compressor.html @@ -8,6 +8,9 @@ + +Text copied +
@@ -48,7 +51,7 @@
-
+
@@ -135,7 +138,7 @@
-
+
diff --git a/main.js b/main.js
index 0cc35d6..5ed2d79 100644
--- a/main.js
+++ b/main.js
@@ -46,6 +46,8 @@ function createWindow() {
return false;
});
+ // TODO: Remember maximize state
+
win.on("resize", (event) => {
setItem("bounds", JSON.stringify(win.getBounds()), configFile);
});
diff --git a/src/common.js b/src/common.js
index 8cddc39..7574b8c 100644
--- a/src/common.js
+++ b/src/common.js
@@ -1,40 +1,4 @@
const electron = require("electron");
-/**
- *
- * @param {string} id
- * @returns {any}
- */
-function getId(id) {
- return document.getElementById(id);
-}
-
-let menuIsOpen = false;
-
-getId("menuIcon").addEventListener("click", () => {
- if (menuIsOpen) {
- getId("menuIcon").style.transform = "rotate(0deg)";
- menuIsOpen = false;
- let count = 0;
- let opacity = 1;
- const fade = setInterval(() => {
- if (count >= 10) {
- getId("menu").style.display = "none";
- clearInterval(fade);
- } else {
- getId("menu").style.opacity = opacity.toFixed(3).toString();
- count++;
- }
- }, 50);
- } else {
- getId("menuIcon").style.transform = "rotate(90deg)";
- menuIsOpen = true;
-
- setTimeout(() => {
- getId("menu").style.display = "flex";
- getId("menu").style.opacity = 1;
- }, 150);
- }
-});
getId("themeToggle").addEventListener("change", () => {
document.documentElement.setAttribute("theme", getId("themeToggle").value);
diff --git a/src/compressor.js b/src/compressor.js
index b06aabb..652f2b3 100644
--- a/src/compressor.js
+++ b/src/compressor.js
@@ -2,44 +2,17 @@ const {exec} = require("child_process");
const path = require("path");
const {ipcRenderer, shell} = require("electron");
const os = require("os");
-const si = require("systeminformation")
+const si = require("systeminformation");
+const menu = require("../utils/menu");
+const getFfmpegPath = require("../utils/ffmpeg");
let menuIsOpen = false;
getId("menuIcon").addEventListener("click", () => {
- if (menuIsOpen) {
- getId("menuIcon").style.transform = "rotate(0deg)";
- menuIsOpen = false;
- let count = 0;
- let opacity = 1;
- const fade = setInterval(() => {
- if (count >= 10) {
- getId("menu").style.display = "none";
- clearInterval(fade);
- } else {
- opacity -= 0.1;
- getId("menu").style.opacity = opacity.toFixed(3).toString();
- count++;
- }
- }, 50);
- } else {
- getId("menuIcon").style.transform = "rotate(90deg)";
- menuIsOpen = true;
-
- setTimeout(() => {
- getId("menu").style.display = "flex";
- getId("menu").style.opacity = "1";
- }, 150);
- }
-});
+ menuIsOpen = menu.initializeMenu(menuIsOpen)
+})
-
-let ffmpeg;
-if (os.platform() === "win32") {
- ffmpeg = `"${__dirname}\\..\\ffmpeg.exe"`;
-} else {
- ffmpeg = `"${__dirname}/../ffmpeg"`;
-}
+let ffmpeg = getFfmpegPath();
const vaapi_device = "/dev/dri/renderD128"
@@ -54,33 +27,44 @@ si.graphics().then((info) => {
const gpuModel = gpu.model.toLowerCase()
if (gpuName.includes("nvidia") || gpuModel.includes("nvidia")) {
- document.querySelectorAll(".nvidia_opt").forEach((opt) => {
+ document.querySelectorAll(".nvidia_opt").forEach(
+ /** @param {HTMLElement} opt */
+ (opt) => {
opt.style.display = "block"
})
} else if (gpuName.includes("advanced micro devices") || gpuModel.includes("amd")) {
if (os.platform() == "win32") {
- document.querySelectorAll(".amf_opt").forEach((opt) => {
- opt.style.display = "block"
-
+ document.querySelectorAll(".amf_opt").forEach(
+ /** @param {HTMLElement} opt */
+ (opt) => {
+ opt.style.display = "block"
})
} else {
- document.querySelectorAll(".vaapi_opt").forEach((opt) => {
+ document.querySelectorAll(".vaapi_opt").forEach(
+ /** @param {HTMLElement} opt */
+ (opt) => {
opt.style.display = "block"
})
}
} else if (gpuName.includes("intel")) {
if (os.platform() == "win32") {
- document.querySelectorAll(".qsv_opt").forEach((opt) => {
+ document.querySelectorAll(".qsv_opt").forEach(
+ /** @param {HTMLElement} opt */
+ (opt) => {
opt.style.display = "block"
})
} else if (os.platform() != "darwin") {
- document.querySelectorAll(".vaapi_opt").forEach((opt) => {
+ document.querySelectorAll(".vaapi_opt").forEach(
+ /** @param {HTMLElement} opt */
+ (opt) => {
opt.style.display = "block"
})
}
} else {
if (os.platform() == "darwin") {
- document.querySelectorAll(".videotoolbox_opt").forEach((opt) => {
+ document.querySelectorAll(".videotoolbox_opt").forEach(
+ /** @param {HTMLElement} opt */
+ (opt) => {
opt.style.display = "block"
})
}
@@ -115,7 +99,9 @@ dropZone.addEventListener("dragleave", () => {
dropZone.classList.remove("dragover");
});
-dropZone.addEventListener("drop", (e) => {
+dropZone.addEventListener("drop",
+ /** @param {DragEvent} e */
+ (e) => {
e.preventDefault();
dropZone.classList.remove("dragover");
// @ts-ignore
@@ -125,8 +111,8 @@ dropZone.addEventListener("drop", (e) => {
});
fileInput.addEventListener("change", (e) => {
- // @ts-ignore
- files = Array.from(e.target.files);
+ const target = /** @type {HTMLInputElement} */ (e.target);
+ files = Array.from(target.files);
updateSelectedFiles();
});
@@ -284,7 +270,7 @@ async function compressVideo(file, settings, itemId, outputPath) {
/**
* @param {File} file
- * @param {{ encoder: string; speed: string; videoQuality: string; audioQuality: string; audioFormat: string }} settings
+ * @param {{ encoder: string; speed: string; videoQuality: string; audioQuality?: string; audioFormat: string }} settings
* @param {string} outputPath
*/
function buildFFmpegCommand(file, settings, outputPath) {
@@ -302,6 +288,7 @@ function buildFFmpegCommand(file, settings, outputPath) {
args.push(
"-c:v",
"libx264",
+ "-vf", "format=yuv420p",
"-preset",
settings.speed,
"-crf",
@@ -312,6 +299,7 @@ function buildFFmpegCommand(file, settings, outputPath) {
args.push(
"-c:v",
"libx265",
+ "-vf", "format=yuv420p",
"-preset",
settings.speed,
"-crf",
@@ -323,6 +311,7 @@ function buildFFmpegCommand(file, settings, outputPath) {
args.push(
"-c:v",
"h264_qsv",
+ "-vf", "format=yuv420p",
"-preset",
settings.speed,
"-global_quality",
@@ -359,6 +348,7 @@ function buildFFmpegCommand(file, settings, outputPath) {
args.push(
"-c:v",
"h264_nvenc",
+ "-vf", "format=yuv420p",
"-preset",
getNvencPreset(settings.speed),
"-rc",
@@ -380,6 +370,7 @@ function buildFFmpegCommand(file, settings, outputPath) {
args.push(
"-c:v",
"hevc_amf",
+ "-vf", "format=yuv420p",
"-quality",
amf_hevc_quality,
"-rc",
@@ -402,6 +393,7 @@ function buildFFmpegCommand(file, settings, outputPath) {
args.push(
"-c:v",
"h264_amf",
+ "-vf", "format=yuv420p",
"-quality",
amf_quality,
"-rc",
@@ -426,8 +418,6 @@ function buildFFmpegCommand(file, settings, outputPath) {
// args.push("-vf", "scale=trunc(iw*1/2)*2:trunc(ih*1/2)*2,format=yuv420p");
- args.push("-vf", "format=yuv420p");
-
args.push("-c:a", settings.audioFormat, `"${outputPath}"`);
return `${ffmpeg} ${args.join(" ")}`;
@@ -498,7 +488,7 @@ function createProgressItem(filename, status, data, itemId) {