diff --git a/out/Converter.js b/out/Converter.js index 1375e551..3e3ac1a3 100644 --- a/out/Converter.js +++ b/out/Converter.js @@ -4,7 +4,7 @@ exports.convert = void 0; const child_process = require("child_process"); const fs = require("fs"); const log = require("./log"); -function convert(inFilename, outFilename, encoder, args = null) { +function convert(inFilename, outFilename, encoder, args = []) { return new Promise((resolve, reject) => { if (fs.existsSync(outFilename.toString()) && fs.statSync(outFilename.toString()).mtime.getTime() > fs.statSync(inFilename.toString()).mtime.getTime()) { resolve(true); @@ -18,27 +18,21 @@ function convert(inFilename, outFilename, encoder, args = null) { let firstspace = encoder.indexOf(' ', dirend); let exe = encoder.substr(0, firstspace); let parts = encoder.substr(firstspace + 1).split(' '); - let options = []; - for (let i = 0; i < parts.length; ++i) { - let foundarg = false; - if (args !== null) { - for (let arg in args) { - if (parts[i] === '{' + arg + '}') { - options.push(args[arg]); - foundarg = true; - break; - } - } + let options = parts.map(part => { + // finds {i} in encoder parts and replaces with args[i] if they are specified + for (let i = 0; i < args.length; i++) { + if (part === '{' + i + '}') + return args[i]; } - if (foundarg) - continue; - if (parts[i] === '{in}') - options.push(inFilename.toString()); - else if (parts[i] === '{out}') - options.push(outFilename.toString()); - else - options.push(parts[i]); - } + if (part == '{ffmpeg_ogg_options}') { + return ['-c:a', 'libvorbis', '-vn']; + } + if (part === '{in}') + return inFilename.toString(); + if (part === '{out}') + return outFilename.toString(); + return part; + }).flat().filter(option => option != undefined); if (fs.existsSync(outFilename.toString())) { fs.unlinkSync(outFilename.toString()); } diff --git a/out/main.js b/out/main.js index f9e0a373..9eaeadac 100644 --- a/out/main.js +++ b/out/main.js @@ -638,7 +638,7 @@ async function run(options, loglog) { log.info('Using kraffiti from ' + options.kraffiti); } if (!options.ogg && options.ffmpeg) { - options.ogg = options.ffmpeg + ' -nostdin -i {in} {out} -y'; + options.ogg = options.ffmpeg + ' -nostdin -i {in} {ffmpeg_ogg_options} {out} -y'; } if (!options.mp3 && options.ffmpeg) { options.mp3 = options.ffmpeg + ' -nostdin -i {in} {out}'; diff --git a/src/Converter.ts b/src/Converter.ts index 5259d74c..b6572aa5 100644 --- a/src/Converter.ts +++ b/src/Converter.ts @@ -2,7 +2,7 @@ import * as child_process from 'child_process'; import * as fs from 'fs'; import * as log from './log'; -export function convert(inFilename: string, outFilename: string, encoder: string, args: Array = null): Promise { +export function convert(inFilename: string, outFilename: string, encoder: string, args: Array = []): Promise { return new Promise((resolve, reject) => { if (fs.existsSync(outFilename.toString()) && fs.statSync(outFilename.toString()).mtime.getTime() > fs.statSync(inFilename.toString()).mtime.getTime()) { resolve(true); @@ -18,27 +18,25 @@ export function convert(inFilename: string, outFilename: string, encoder: string let firstspace = encoder.indexOf(' ', dirend); let exe = encoder.substr(0, firstspace); let parts = encoder.substr(firstspace + 1).split(' '); - let options: string[] = []; - for (let i = 0; i < parts.length; ++i) { - let foundarg = false; - if (args !== null) { - for (let arg in args) { - if (parts[i] === '{' + arg + '}') { - options.push(args[arg]); - foundarg = true; - break; - } - } + let options: string[] = parts.map(part => { + // finds {i} in encoder parts and replaces with args[i] if they are specified + for (let i = 0; i < args.length; i++) { + if (part === '{' + i + '}') return args[i]; } - if (foundarg) continue; - if (parts[i] === '{in}') options.push(inFilename.toString()); - else if (parts[i] === '{out}') options.push(outFilename.toString()); - else options.push(parts[i]); - } + if (part == '{ffmpeg_ogg_options}') { + return ['-c:a', 'libvorbis', '-vn']; + } + if (part === '{in}') return inFilename.toString(); + if (part === '{out}') return outFilename.toString(); + + return part; + }).flat().filter(option => option != undefined); + if (fs.existsSync(outFilename.toString())) { fs.unlinkSync(outFilename.toString()); } + // About stdio ignore: https://stackoverflow.com/a/20792428 let process = child_process.spawn(exe, options, { stdio: ['ignore', 'ignore', 'pipe'] // don't ignore stderr diff --git a/src/main.ts b/src/main.ts index d8da2c0a..e3439c5b 100644 --- a/src/main.ts +++ b/src/main.ts @@ -720,7 +720,7 @@ export async function run(options: Options, loglog: any): Promise { } if (!options.ogg && options.ffmpeg) { - options.ogg = options.ffmpeg + ' -nostdin -i {in} {out} -y'; + options.ogg = options.ffmpeg + ' -nostdin -i {in} {ffmpeg_ogg_options} {out} -y'; } if (!options.mp3 && options.ffmpeg) { diff --git a/tsconfig.json b/tsconfig.json index 49c2e6e0..bcbc5364 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,6 +1,6 @@ { "compilerOptions": { - "target": "es2017", + "target": "es2019", "module": "commonjs", "sourceMap": true, "outDir": "out",