added check for ffmpeg, more filetype support
This commit is contained in:
parent
df237e01cb
commit
e9c4cf1e68
1 changed files with 48 additions and 7 deletions
55
bin/index.js
55
bin/index.js
|
@ -5,6 +5,7 @@ const termkit = require("terminal-kit")
|
||||||
const { Encoder } = require("../lib/encoder.js")
|
const { Encoder } = require("../lib/encoder.js")
|
||||||
const { UI } = require("../lib/ui.js")
|
const { UI } = require("../lib/ui.js")
|
||||||
const { SettingsManager } = require("../lib/settingsManager.js")
|
const { SettingsManager } = require("../lib/settingsManager.js")
|
||||||
|
const { exec } = require('child_process')
|
||||||
let term = termkit.terminal
|
let term = termkit.terminal
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -54,12 +55,16 @@ else {
|
||||||
fileNames.push(file[0])
|
fileNames.push(file[0])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
main()
|
main()
|
||||||
|
|
||||||
async function main(menu = false) {
|
async function main(menu = false) {
|
||||||
|
//check if ffmpeg and ffprobe exist
|
||||||
//get settings
|
//get settings
|
||||||
let settings = new SettingsManager()
|
let settings = new SettingsManager()
|
||||||
await settings.start(__dirname)
|
await settings.start(__dirname)
|
||||||
|
await checkFF()
|
||||||
const ui = new UI(settings.settings, settings.currentSetting, settings.settingsFile, filePaths?.length)
|
const ui = new UI(settings.settings, settings.currentSetting, settings.settingsFile, filePaths?.length)
|
||||||
|
|
||||||
if (menu) savesettings = await ui.startMenu()
|
if (menu) savesettings = await ui.startMenu()
|
||||||
|
@ -79,9 +84,10 @@ async function main(menu = false) {
|
||||||
//check if all files are valid formats
|
//check if all files are valid formats
|
||||||
if (isListEncodable) {
|
if (isListEncodable) {
|
||||||
for (let i = 0; i < filePaths.length; i++) {
|
for (let i = 0; i < filePaths.length; i++) {
|
||||||
if (fileTypes[i] == "jpg" || fileTypes[i] == "JPG" || fileTypes[i] == "png" || fileTypes[i] == "PNG" || fileTypes[i] == "webp" ||
|
const filetype = fileTypes[i].toLowerCase()
|
||||||
fileTypes[i] == "webm" || fileTypes[i] == "mp4" || fileTypes[i] == "mov" || fileTypes[i] == "mkv" || fileTypes[i] == "avi" ||
|
if (fileType == "jpg" || fileType == "png" || fileType == "webp" ||
|
||||||
fileTypes[i] == "ogg" || fileTypes[i] == "mp3" || fileTypes[i] == "aiff" || fileTypes[i] == "wav" || fileTypes[i] == "flac") {
|
fileType == "webm" || fileType == "mp4" || fileType == "mov" || fileType == "mkv" || fileType == "avi" ||
|
||||||
|
fileType == "ogg" || fileType == "mp3" || fileType == "aiff" || fileType == "wav" || fileType == "flac") {
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
term.italic(`${fileTypes[i]}`).bold.red(` <- Unsupported format\n`)
|
term.italic(`${fileTypes[i]}`).bold.red(` <- Unsupported format\n`)
|
||||||
|
@ -97,25 +103,60 @@ async function main(menu = false) {
|
||||||
let encoder = []
|
let encoder = []
|
||||||
console.log(`Encoding with "${settings.currentSetting.name}" preset...`)
|
console.log(`Encoding with "${settings.currentSetting.name}" preset...`)
|
||||||
for (let i = 0; i < filePaths.length; i++) {
|
for (let i = 0; i < filePaths.length; i++) {
|
||||||
|
const filetype = fileTypes[i].toLowerCase()
|
||||||
encoder.push(new Encoder(settings.settings, settings.currentSetting, presetIndexArg))
|
encoder.push(new Encoder(settings.settings, settings.currentSetting, presetIndexArg))
|
||||||
|
|
||||||
if (fileTypes[i] == "jpg" || fileTypes[i] == "JPG" || fileTypes[i] == "png" || fileTypes[i] == "PNG" || fileTypes[i] == "webp") {
|
if (fileType == "jpg" || fileType == "png" || fileType == "webp") {
|
||||||
ui.newBar(await encoder[i].encodePicture(filePaths[i], fileNames[i]))
|
ui.newBar(await encoder[i].encodePicture(filePaths[i], fileNames[i]))
|
||||||
encoder[i].on("update", (chunk) => { ui.updateBar(chunk, i, false, true) })
|
encoder[i].on("update", (chunk) => { ui.updateBar(chunk, i, false, true) })
|
||||||
encoder[i].on("close", () => { ui.encodeFinished(i) })
|
encoder[i].on("close", () => { ui.encodeFinished(i) })
|
||||||
}
|
}
|
||||||
else if (fileTypes[i] == "webm" || fileTypes[i] == "mp4" || fileTypes[i] == "mov" || fileTypes[i] == "mkv" || fileTypes[i] == "avi") {
|
else if (fileType == "webm" || fileType == "mp4" || fileType == "mov" || fileType == "mkv" || fileType == "avi") {
|
||||||
ui.newBar(await encoder[i].encodeVideo(filePaths[i], fileNames[i]))
|
ui.newBar(await encoder[i].encodeVideo(filePaths[i], fileNames[i]))
|
||||||
encoder[i].on("update", (chunk) => { ui.updateBar(chunk, i) })
|
encoder[i].on("update", (chunk) => { ui.updateBar(chunk, i) })
|
||||||
encoder[i].on("close", () => { ui.encodeFinished(i) })
|
encoder[i].on("close", () => { ui.encodeFinished(i) })
|
||||||
}
|
}
|
||||||
else if (fileTypes[i] == "ogg" || fileTypes[i] == "mp3" || fileTypes[i] == "aiff" || fileTypes[i] == "wav" || fileTypes[i] == "flac") {
|
else if (fileType == "ogg" || fileType == "mp3" || fileType == "aiff" || fileType == "wav" || fileType == "flac") {
|
||||||
ui.newBar(await encoder[i].encodeAudio(filePaths[i], fileNames[i]))
|
ui.newBar(await encoder[i].encodeAudio(filePaths[i], fileNames[i]))
|
||||||
encoder[i].on("update", (chunk) => { ui.updateBar(chunk, i, false) })
|
encoder[i].on("update", (chunk) => { ui.updateBar(chunk, i, false) })
|
||||||
encoder[i].on("close", () => { ui.encodeFinished(i) })
|
encoder[i].on("close", () => { ui.encodeFinished(i) })
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function checkFF() {
|
||||||
|
//check if ffmpeg installed and working
|
||||||
|
return new Promise(async (resolve, reject) => {
|
||||||
|
const test = exec(`ffprobe`)
|
||||||
|
test.stderr.on("data", (chunk) => {
|
||||||
|
if (chunk.substring(0, 15) == "ffprobe version") {
|
||||||
|
resolve()
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
term.red("\nError using ffprobe, please make sure ffprobe is installed and working from terminal.\n")
|
||||||
|
term.blue.underline("https://ffmpeg.org/download.html\n")
|
||||||
|
term.grey("press enter to exit...")
|
||||||
|
term.inputField(function () {
|
||||||
|
process.exit()
|
||||||
|
reject()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
const test2 = exec(`ffmpeg`)
|
||||||
|
test2.stderr.on("data", (chunk) => {
|
||||||
|
if (chunk.substring(0, 14) == "ffmpeg version") {
|
||||||
|
resolve()
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
term.red("\nError using ffmpeg, please make sure ffmpeg is installed and working from terminal.\n")
|
||||||
|
term.blue.underline("https://ffmpeg.org/download.html\n")
|
||||||
|
term.grey("press enter to exit...\n")
|
||||||
|
term.inputField(function () {
|
||||||
|
process.exit()
|
||||||
|
reject()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
}
|
}
|
Loading…
Reference in a new issue