Conversion is back!

This commit is contained in:
Bingus_Violet 2023-12-09 13:20:18 -06:00
parent 63dd7b3bc7
commit c23fc35bc0
5 changed files with 367 additions and 36 deletions

View file

@ -4,7 +4,8 @@ const ytdl = require('ytdl-core'),
express = require('express'),
bodyParser = require('body-parser'),
cp = require("child_process"),
ffmpeg = require('ffmpeg-static')
ffmpeg = require('ffmpeg-static'),
multer = require('multer')
const PORT = process.env.PORT || 8080
@ -14,6 +15,8 @@ var formats = {
"matroska": "mkv"
}
var uploads = multer({ dest: 'uploads/' })
const characters = "abcdefghijklmnopqrstuvwxyz!@$%^*()[]_-=+ "
process.on('uncaughtException', (err, origin) => {
@ -26,6 +29,30 @@ process.on('uncaughtException', (err, origin) => {
app.use(bodyParser.urlencoded({ extended: false }))
app.post("/convert", uploads.single("files"), (req, res) => {
var file = req.file
var preset = req.body.preset || 'veryfast'
var format = req.body.format || 'mp4'
console.log(file)
const ffmpegProcess = cp.spawn(ffmpeg, [
'-i', file.path,
'-preset', preset,
'-f', format,
'-loglevel', 'error',
'-'
], {
stdio: [
'pipe', 'pipe', 'pipe', 'pipe', 'pipe',
],
})
res.setHeader('Content-Disposition', `attachment; filename="${file.originalname.substring(0, file.originalname.lastIndexOf('.'))}.${formats[format] || format}"`);
ffmpegProcess.stdio[1].pipe(res)
})
app.get("/download", async (req, res) => {
const url = req.query.url
const format = req.query.format || 'mp4'
@ -59,19 +86,15 @@ app.get("/download", async (req, res) => {
const ffmpegProcess = cp.spawn(ffmpeg, [
'-i', `pipe:3`,
'-c:v', 'copy',
'-c:a', 'libmp3lame',
'-crf','27',
'-preset',preset,
'-movflags','frag_keyframe+empty_moov',
'-preset', preset,
'-f', format,
'-loglevel','error',
'-loglevel', 'error',
'-'
], {
], {
stdio: [
'pipe', 'pipe', 'pipe', 'pipe', 'pipe',
'pipe', 'pipe', 'pipe', 'pipe', 'pipe',
],
})
})
audio.pipe(ffmpegProcess.stdio[3])
@ -81,25 +104,25 @@ app.get("/download", async (req, res) => {
} else if (defin == "hd") {
var video = ytdl(url, { filter: 'videoonly', quality: quality })
var audio = ytdl(url, { filter: 'audioonly', highWaterMark: 1<<25 })
var audio = ytdl(url, { filter: 'audioonly', highWaterMark: 1 << 25 })
const ffmpegProcess = cp.spawn(ffmpeg, [
'-i', `pipe:3`,
'-i', `pipe:4`,
'-map','0:v',
'-map','1:a',
'-c:v', 'copy',
'-c:a', 'libmp3lame',
'-crf','27',
'-preset',preset,
'-movflags','frag_keyframe+empty_moov',
'-f', format,
'-loglevel','error',
'-'
'-i', `pipe:3`,
'-i', `pipe:4`,
'-map', '0:v',
'-map', '1:a',
'-c:v', 'copy',
'-c:a', 'libmp3lame',
'-crf', '27',
'-preset', preset,
'-movflags', 'frag_keyframe+empty_moov',
'-f', format,
'-loglevel', 'error',
'-'
], {
stdio: [
stdio: [
'pipe', 'pipe', 'pipe', 'pipe', 'pipe',
],
],
})
video.pipe(ffmpegProcess.stdio[3])
@ -113,19 +136,15 @@ app.get("/download", async (req, res) => {
const ffmpegProcess = cp.spawn(ffmpeg, [
'-i', `pipe:3`,
'-c:v', 'copy',
'-c:a', 'libmp3lame',
'-crf','27',
'-preset',preset,
'-movflags','frag_keyframe+empty_moov',
'-preset', preset,
'-f', format,
'-loglevel','error',
'-loglevel', 'error',
'-'
], {
], {
stdio: [
'pipe', 'pipe', 'pipe', 'pipe', 'pipe',
'pipe', 'pipe', 'pipe', 'pipe', 'pipe',
],
})
})
video.pipe(ffmpegProcess.stdio[3])