diff --git a/public/script.js b/public/script.js index 8b89194..490563f 100644 --- a/public/script.js +++ b/public/script.js @@ -7,6 +7,10 @@ let fileType; let pendingFiles = 0; let formatSelected = false; +const urlParams = new URLSearchParams(window.location.search); +const defaultTo = urlParams.get("to"); +const defaultConverter = urlParams.get("converter"); + dropZone.addEventListener("dragover", (e) => { e.preventDefault(); dropZone.classList.add("dragover"); @@ -59,6 +63,23 @@ function handleFile(file) { .then((html) => { selectContainer.innerHTML = html; updateSearchBar(); + + if (defaultTo) { + const selector = defaultConverter + ? `.target[data-value="${defaultTo},${defaultConverter}"]` + : `.target[data-target="${defaultTo}"]`; + const targetBtn = document.querySelector(selector); + if (targetBtn) { + const convertToEl = document.querySelector("select[name='convert_to']"); + const convertToInputEl = document.querySelector("input[name='convert_to_search']"); + convertToEl.value = targetBtn.dataset.value; + convertToInputEl.value = `${targetBtn.dataset.target} using ${targetBtn.dataset.converter}`; + formatSelected = true; + if (pendingFiles === 0 && fileNames.length > 0) { + convertButton.disabled = false; + } + } + } }) .catch(console.error); } diff --git a/src/converters/ffmpeg.ts b/src/converters/ffmpeg.ts index 8f26385..f0418f4 100644 --- a/src/converters/ffmpeg.ts +++ b/src/converters/ffmpeg.ts @@ -670,6 +670,7 @@ export const properties = { "vvc", "w64", "wav", + "wav-3cx", "wbmp", "webm", "webp", @@ -708,6 +709,11 @@ export async function convert( message = "Done: resized to 256x256"; } + if (convertTo === "wav-3cx") { + // 3CX telephony preset: mono, 8 kHz, 16-bit PCM + extraArgs.push("-ac", "1", "-ar", "8000", "-sample_fmt", "s16"); + } + if (convertTo.split(".").length > 1) { // Support av1.mkv and av1.mp4 and h265.mp4 etc. const split = convertTo.split("."); diff --git a/src/helpers/normalizeFiletype.ts b/src/helpers/normalizeFiletype.ts index dcdce29..18521de 100644 --- a/src/helpers/normalizeFiletype.ts +++ b/src/helpers/normalizeFiletype.ts @@ -49,6 +49,8 @@ export const normalizeOutputFiletype = (filetype: string): string => { return "fbx"; case "assjson": return "json"; + case "wav-3cx": + return "wav"; default: return lowercaseFiletype; }