diff --git a/lib/encoder.js b/lib/encoder.js index 2cb4780..e3ebb8a 100644 --- a/lib/encoder.js +++ b/lib/encoder.js @@ -4,6 +4,7 @@ const termkit = require('terminal-kit') class Encoder { settings encoder + #maxOpusBitrate = 500 //kbits constructor(settings, currentSetting) { this.settings = settings } @@ -28,8 +29,12 @@ class Encoder { */ async encodeAudio(path, out) { let [duration, resolution] = await this.#getDurationAndResolution(path) - const audioBitRate = Math.round(62000 / duration) + let audioBitRate = Math.round(this.settings.size_limit / duration) + if (audioBitRate > this.#maxOpusBitrate) { + audioBitRate = this.#maxOpusBitrate + } this.encoder = exec(`ffmpeg -y -i "${path}" -c:a libvorbis -b:a ${audioBitRate}k "${out}.ogg"`) + console.log(`ffmpeg -y -i "${path}" -c:a libvorbis -b:a ${audioBitRate}k "${out}.ogg"`) return [duration, out, undefined] } @@ -47,14 +52,13 @@ class Encoder { let [duration, resolutionHeight] = await this.#getDurationAndResolution(path) //Calculates video bitrate to fit right under 8mb 1:7 audio:video. 8Mb * 8 = 64000(8mb) - 1000 for overhead, *0.95 to leave space for container. - const maxOpusBitrate = 256 //kbits let audioBitRate = Math.round((this.settings.size_limit / 8 * 1 / duration) * 0.95) let videoBitRate = Math.round((this.settings.size_limit / 8 * 7 / duration) * 0.95) - //if maxOpusBitrate reached, cap the audio bit rate and give the rest of the bits to video - if (audioBitRate > maxOpusBitrate) { - videoBitRate += audioBitRate - maxOpusBitrate - audioBitRate = maxOpusBitrate + //if this.#maxOpusBitrate reached, cap the audio bit rate and give the rest of the bits to video + if (audioBitRate > this.#maxOpusBitrate) { + videoBitRate += audioBitRate - this.#maxOpusBitrate + audioBitRate = this.#maxOpusBitrate } let command = ""