|
|
@ -1,5 +1,5 @@
|
|
|
|
import os from 'node:os';
|
|
|
|
import os from 'node:os';
|
|
|
|
import { exec } from 'node:child_process';
|
|
|
|
import { execFile } from 'node:child_process';
|
|
|
|
const { NODE_ENV } = process.env;
|
|
|
|
const { NODE_ENV } = process.env;
|
|
|
|
const ytdlpMaxResolution = 2160;
|
|
|
|
const ytdlpMaxResolution = 2160;
|
|
|
|
|
|
|
|
|
|
|
@ -15,7 +15,7 @@ export default {
|
|
|
|
};
|
|
|
|
};
|
|
|
|
async function downloadVideo(urlArg, output, format = `bestvideo[height<=?${ytdlpMaxResolution}]+bestaudio/best`) {
|
|
|
|
async function downloadVideo(urlArg, output, format = `bestvideo[height<=?${ytdlpMaxResolution}]+bestaudio/best`) {
|
|
|
|
await new Promise((resolve, reject) => {
|
|
|
|
await new Promise((resolve, reject) => {
|
|
|
|
exec(`./bin/yt-dlp -f "${format}" "${urlArg}" -o "${os.tmpdir()}/${output}.%(ext)s" --force-overwrites --no-playlist --remux-video=mp4/webm/mov --no-warnings`, (err, stdout, stderr) => {
|
|
|
|
execFile('./bin/yt-dlp', ['-f', format, urlArg, '-o', `${os.tmpdir()}/${output}.%(ext)s`, '--force-overwrites', '--no-playlist', '--remux-video=mp4/webm/mov', '--no-warnings'], (err, stdout, stderr) => {
|
|
|
|
if (err) {
|
|
|
|
if (err) {
|
|
|
|
return reject(stderr);
|
|
|
|
return reject(stderr);
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -32,7 +32,7 @@ async function downloadVideo(urlArg, output, format = `bestvideo[height<=?${ytdl
|
|
|
|
|
|
|
|
|
|
|
|
async function upload(file) {
|
|
|
|
async function upload(file) {
|
|
|
|
return await new Promise((resolve, reject) => {
|
|
|
|
return await new Promise((resolve, reject) => {
|
|
|
|
exec(`./bin/upload.sh ${file}`, (err, stdout, stderr) => {
|
|
|
|
execFile('./bin/upload.sh', [file], (err, stdout, stderr) => {
|
|
|
|
if (err) {
|
|
|
|
if (err) {
|
|
|
|
reject(stderr);
|
|
|
|
reject(stderr);
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -46,7 +46,7 @@ async function upload(file) {
|
|
|
|
|
|
|
|
|
|
|
|
async function ffmpeg(command) {
|
|
|
|
async function ffmpeg(command) {
|
|
|
|
return await new Promise((resolve, reject) => {
|
|
|
|
return await new Promise((resolve, reject) => {
|
|
|
|
exec(`ffmpeg -hide_banner ${command}`, (err, stdout, stderr) => {
|
|
|
|
execFile('ffmpeg', ['-hide_banner', ...command], (err, stdout, stderr) => {
|
|
|
|
if (err) {
|
|
|
|
if (err) {
|
|
|
|
reject(stderr);
|
|
|
|
reject(stderr);
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -71,7 +71,7 @@ async function stringIsAValidurl(s) {
|
|
|
|
|
|
|
|
|
|
|
|
async function compressVideo(input, output, preset) {
|
|
|
|
async function compressVideo(input, output, preset) {
|
|
|
|
await new Promise((resolve, reject) => {
|
|
|
|
await new Promise((resolve, reject) => {
|
|
|
|
exec(`./bin/HandBrakeCLI -i "${input}" -Z "${preset}" -o "${os.tmpdir()}/${output}"`, (err, stdout, stderr) => {
|
|
|
|
execFile('./bin/HandBrakeCLI', ['-i', input, '-Z', preset, '-o', `${os.tmpdir()}/${output}`], (err, stdout, stderr) => {
|
|
|
|
if (err) {
|
|
|
|
if (err) {
|
|
|
|
reject(stderr);
|
|
|
|
reject(stderr);
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -85,7 +85,7 @@ async function compressVideo(input, output, preset) {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
async function getVideoCodec(input) {
|
|
|
|
async function getVideoCodec(input) {
|
|
|
|
return await new Promise((resolve, reject) => {
|
|
|
|
return await new Promise((resolve, reject) => {
|
|
|
|
exec(`ffprobe -v error -select_streams v:0 -show_entries stream=codec_name -of default=noprint_wrappers=1:nokey=1 "${input}"`, (err, stdout, stderr) => {
|
|
|
|
execFile('ffprobe', ['-v', 'error', '-select_streams', 'v:0', '-show_entries', 'stream=codec_name', '-of', 'default=noprint_wrappers=1:nokey=1', input], (err, stdout, stderr) => {
|
|
|
|
if (err) {
|
|
|
|
if (err) {
|
|
|
|
reject(stderr);
|
|
|
|
reject(stderr);
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -99,7 +99,7 @@ async function getVideoCodec(input) {
|
|
|
|
|
|
|
|
|
|
|
|
async function getVideoSize(urlArg, format = `bestvideo[height<=?${ytdlpMaxResolution}]+bestaudio/best`) {
|
|
|
|
async function getVideoSize(urlArg, format = `bestvideo[height<=?${ytdlpMaxResolution}]+bestaudio/best`) {
|
|
|
|
return await new Promise((resolve, reject) => {
|
|
|
|
return await new Promise((resolve, reject) => {
|
|
|
|
exec(`./bin/yt-dlp "${urlArg}" -f "${format}" --no-warnings -O "%(filesize,filesize_approx)s"`, (err, stdout, stderr) => {
|
|
|
|
execFile('./bin/yt-dlp', [urlArg, '-f', format, '--no-warnings', '-O', '%(filesize,filesize_approx)s'], (err, stdout, stderr) => {
|
|
|
|
if (err) {
|
|
|
|
if (err) {
|
|
|
|
reject(stderr);
|
|
|
|
reject(stderr);
|
|
|
|
}
|
|
|
|
}
|
|
|
|