From 4ef34bc489a4534aa1493554af21a399ec1dfbd6 Mon Sep 17 00:00:00 2001 From: loicbersier Date: Sat, 19 Jan 2019 17:23:45 +0100 Subject: [PATCH] Compress video if bigger than 8 MB --- commands/utility/download.js | 54 +++++++++++++++++++++++++++++------- 1 file changed, 44 insertions(+), 10 deletions(-) diff --git a/commands/utility/download.js b/commands/utility/download.js index 735d9cb..a27b15a 100644 --- a/commands/utility/download.js +++ b/commands/utility/download.js @@ -1,6 +1,7 @@ const { Command } = require('discord-akairo'); const fs = require('fs'); const youtubedl = require('youtube-dl'); +const hbjs = require('handbrake-js'); const { fbuser, fbpasswd } = require('../../config.json'); class DownloadCommand extends Command { @@ -26,24 +27,57 @@ class DownloadCommand extends Command { async exec(message, args) { let link = args.link; + let big = false; if (link.includes('http') || link.includes('www')) { - message.channel.send('Downloading ').then(msg => { - video.on('end', function () { - msg.delete(); - }); - }); - let video = youtubedl(link, [`--username=${fbuser}`, `--password=${fbpasswd}`]); + let video = youtubedl(link, [`--username=${fbuser}`, `--password=${fbpasswd}`, '--max-filesize', '8M']); video.pipe(fs.createWriteStream('./video.mp4')); video.on('error', function error(err) { console.log('error 2:', err); message.channel.send('An error has occured, I can\'t download from the link you provided.'); }); + video.on('info', function(info) { + console.log('Download started'); + console.log('filename: ' + info.filename); + console.log('size: ' + info.size); + if (info.size >= 8000000) { + big = true; + } + }); video.on('end', function () { - message.delete(); - message.channel.send(`Downloaded by ${message.author.username}`, { files: ['./video.mp4'] }) - .catch(() => message.channel.send('File too big')); - + if (!big) { + message.delete(); + return message.channel.send(`Downloaded by ${message.author.username}`, { files: ['./video.mp4'] }) + .catch(() => message.channel.send('File too big')); + } + const options = { + input: 'video.mp4', + output: 'videoReady.mp4', + preset: 'General/Gmail Small 10 Minutes 288p30' + }; + + hbjs.spawn(options) + .on('error', err => { + message.channel.send('An error has occured while compressing the video'); + console.error(err); + }) + .on('progress', progress => { + console.log( + 'Percent complete: %s, ETA: %s', + progress.percentComplete, + progress.eta + ); + }) + .on('end', function () { + message.delete(); + message.channel.send(`Downloaded by ${message.author.username}`, { files: ['./videoReady.mp4'] }) + .catch(() => message.channel.send('File too big')); + }); + message.channel.send('Downloading ').then(msg => { + video.on('end', function () { + msg.delete(); + }); + }); }); } else {