Add presets to FFmpeg in menu

This commit is contained in:
TC
2021-12-30 18:46:43 +01:00
parent 14b4c55ce7
commit 8d66735585
4 changed files with 27 additions and 4 deletions

View File

@ -36,6 +36,7 @@ const defaultConfig = {
enabled: false, enabled: false,
ffmpegArgs: [], // e.g. ["-b:a", "192k"] for an audio bitrate of 192kb/s ffmpegArgs: [], // e.g. ["-b:a", "192k"] for an audio bitrate of 192kb/s
downloadFolder: undefined, // Custom download folder (absolute path) downloadFolder: undefined, // Custom download folder (absolute path)
preset: "mp3",
}, },
"last-fm": { "last-fm": {
enabled: false, enabled: false,

View File

@ -8,7 +8,7 @@ const chokidar = require('chokidar');
const { setOptions } = require("../../config/plugins"); const { setOptions } = require("../../config/plugins");
const { sendError } = require("./back"); const { sendError } = require("./back");
const { defaultMenuDownloadLabel, getFolder } = require("./utils"); const { defaultMenuDownloadLabel, getFolder, presets } = require("./utils");
let downloadLabel = defaultMenuDownloadLabel; let downloadLabel = defaultMenuDownloadLabel;
let playingPlaylistId = undefined; let playingPlaylistId = undefined;
@ -109,5 +109,17 @@ module.exports = (win, options) => {
} // else = user pressed cancel } // else = user pressed cancel
}, },
}, },
{
label: "Presets",
submenu: Object.keys(presets).map((preset) => ({
label: preset,
type: "radio",
click: () => {
options.preset = preset;
setOptions("downloader", options);
},
checked: options.preset === preset || presets[preset] === undefined,
})),
},
]; ];
}; };

View File

@ -28,3 +28,12 @@ module.exports.cropMaxWidth = (image) => {
} }
return image; return image;
} }
// Presets for FFmpeg
module.exports.presets = {
"None (defaults to mp3)": undefined,
opus: {
extension: "opus",
ffmpegArgs: ["-acodec", "libopus"],
},
};

View File

@ -15,7 +15,7 @@ const ytdl = require("ytdl-core");
const { triggerAction, triggerActionSync } = require("../utils"); const { triggerAction, triggerActionSync } = require("../utils");
const { ACTIONS, CHANNEL } = require("./actions.js"); const { ACTIONS, CHANNEL } = require("./actions.js");
const { urlToJPG } = require("./utils"); const { presets, urlToJPG } = require("./utils");
const { cleanupName } = require("../../providers/song-info"); const { cleanupName } = require("../../providers/song-info");
const { createFFmpeg } = FFmpeg; const { createFFmpeg } = FFmpeg;
@ -113,8 +113,9 @@ const toMP3 = async (
existingMetadata = undefined, existingMetadata = undefined,
subfolder = "" subfolder = ""
) => { ) => {
const convertOptions = { ...presets[options.preset], ...options };
const safeVideoName = randomBytes(32).toString("hex"); const safeVideoName = randomBytes(32).toString("hex");
const extension = options.extension || "mp3"; const extension = convertOptions.extension || "mp3";
const releaseFFmpegMutex = await ffmpegMutex.acquire(); const releaseFFmpegMutex = await ffmpegMutex.acquire();
try { try {
@ -132,7 +133,7 @@ const toMP3 = async (
"-i", "-i",
safeVideoName, safeVideoName,
...getFFmpegMetadataArgs(metadata), ...getFFmpegMetadataArgs(metadata),
...(options.ffmpegArgs || []), ...(convertOptions.ffmpegArgs || []),
safeVideoName + "." + extension safeVideoName + "." + extension
); );