Handled more error and changed waveform to an image
This commit is contained in:
parent
db0aa8a886
commit
5c7044dd19
1 changed files with 40 additions and 27 deletions
|
@ -84,7 +84,7 @@ class DownloadController {
|
||||||
} else if (f.endsWith('.mp3') || f.endsWith('.flac')) {
|
} else if (f.endsWith('.mp3') || f.endsWith('.flac')) {
|
||||||
// Send file name, file size in MB relative path for the file and relative path of music.png
|
// Send file name, file size in MB relative path for the file and relative path of music.png
|
||||||
let fileInfo = formatBytes(fs.statSync(`./public/uploads/${f}`).size).split(' ');
|
let fileInfo = formatBytes(fs.statSync(`./public/uploads/${f}`).size).split(' ');
|
||||||
files.push({ name: f.split('.').slice(0, -1).join('.'), size: fileInfo[0], unit: fileInfo[1], date: fs.statSync(`./public/uploads/${f}`).ctime, location: `uploads/${f}`, ext: f.split('.').pop(), thumbnail: `/thumbnail/${f}`, img: `/asset/music.png` });
|
files.push({ name: f.split('.').slice(0, -1).join('.'), size: fileInfo[0], unit: fileInfo[1], date: fs.statSync(`./public/uploads/${f}`).ctime, location: `uploads/${f}`, ext: path.extname(f), thumbnail: `/thumbnail/${f.replace(path.extname(f), '.png')}`, img: `/thumbnail/${f.replace(path.extname(f), '.png')}` });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
defaultViewOption.file = files;
|
defaultViewOption.file = files;
|
||||||
|
@ -183,7 +183,7 @@ class DownloadController {
|
||||||
viewOption.errormsg = err;
|
viewOption.errormsg = err;
|
||||||
|
|
||||||
return response.send(view.render(page, viewOption))
|
return response.send(view.render(page, viewOption))
|
||||||
})
|
});
|
||||||
|
|
||||||
let ext;
|
let ext;
|
||||||
video.on('info', function(info) {
|
video.on('info', function(info) {
|
||||||
|
@ -200,7 +200,8 @@ class DownloadController {
|
||||||
if (data.feed == 'on')
|
if (data.feed == 'on')
|
||||||
DLFile = `hidden/${title}.${ext}`;
|
DLFile = `hidden/${title}.${ext}`;
|
||||||
|
|
||||||
video.pipe(fs.createWriteStream(`./public/uploads/${DLFile}`));
|
if (data.sponsorBlock) video.pipe(fs.createWriteStream(`./public/uploads/hidden/${DLFile}`));
|
||||||
|
else video.pipe(fs.createWriteStream(`./public/uploads/${DLFile}`));
|
||||||
});
|
});
|
||||||
|
|
||||||
video.on('end', function() {
|
video.on('end', function() {
|
||||||
|
@ -239,21 +240,22 @@ class DownloadController {
|
||||||
filter += `${video}concat=n=${i + 1}[outv];`;
|
filter += `${video}concat=n=${i + 1}[outv];`;
|
||||||
filter += `${audio}concat=n=${i + 1}:v=0:a=1[outa]`;
|
filter += `${audio}concat=n=${i + 1}:v=0:a=1[outa]`;
|
||||||
|
|
||||||
ffmpeg(`./public/uploads/${DLFile}`)
|
ffmpeg(`./public/uploads/hidden/${DLFile}`)
|
||||||
.inputFormat('mp4')
|
.inputFormat('mp4')
|
||||||
.complexFilter(filter)
|
.complexFilter(filter)
|
||||||
.outputOptions('-map [outv]')
|
.outputOptions('-map [outv]')
|
||||||
.outputOptions('-map [outa]')
|
.outputOptions('-map [outa]')
|
||||||
.save(`./public/uploads/hidden/nosponsor${DLFile}`)
|
.save(`./public/uploads/${DLFile}`)
|
||||||
.on('error', function(err, stdout, stderr) {
|
.on('error', function(err, stdout, stderr) {
|
||||||
console.log(stdout);
|
|
||||||
console.log(stderr);
|
|
||||||
console.log('Cannot process video: ' + err.message);
|
console.log('Cannot process video: ' + err.message);
|
||||||
return;
|
let viewOption = {...defaultViewOption};
|
||||||
|
viewOption.error = true;
|
||||||
|
viewOption.errormsg = err.message;
|
||||||
|
|
||||||
|
return response.send(view.render(page, viewOption))
|
||||||
})
|
})
|
||||||
.on('end', () => {
|
.on('end', () => {
|
||||||
console.log('end');
|
console.log('end');
|
||||||
fs.renameSync(`./public/uploads/hidden/nosponsor${DLFile}`, `./public/uploads/${DLFile}`)
|
|
||||||
response.attachment(`./public/uploads/${DLFile}`)
|
response.attachment(`./public/uploads/${DLFile}`)
|
||||||
generateThumbnail(DLFile);
|
generateThumbnail(DLFile);
|
||||||
});
|
});
|
||||||
|
@ -272,11 +274,19 @@ class DownloadController {
|
||||||
.audioBitrate('320k')
|
.audioBitrate('320k')
|
||||||
.format(data.format)
|
.format(data.format)
|
||||||
.save(`./public/uploads/${DLFile.replace(`.${ext}`, `.${data.format}`)}`)
|
.save(`./public/uploads/${DLFile.replace(`.${ext}`, `.${data.format}`)}`)
|
||||||
|
.on('error', function(err, stdout, stderr) {
|
||||||
|
console.log('Cannot process video: ' + err.message);
|
||||||
|
let viewOption = {...defaultViewOption};
|
||||||
|
viewOption.error = true;
|
||||||
|
viewOption.errormsg = err.message;
|
||||||
|
|
||||||
|
return response.send(view.render(page, viewOption))
|
||||||
|
})
|
||||||
.on('end', () => {
|
.on('end', () => {
|
||||||
fs.unlinkSync(`./public/uploads/${DLFile}`);
|
fs.unlinkSync(`./public/uploads/${DLFile}`);
|
||||||
generateWaveform(DLFile.replace(`.${ext}`, `.${data.format}`));
|
generateWaveform(DLFile.replace(`.${ext}`, `.${data.format}`));
|
||||||
return response.attachment(`./public/uploads/${DLFile.replace(`.${ext}`, `.${data.format}`)}`);
|
return response.attachment(`./public/uploads/${DLFile.replace(`.${ext}`, `.${data.format}`)}`);
|
||||||
})
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -289,7 +299,10 @@ async function generateWaveform(f) {
|
||||||
ffmpeg(`./public/uploads/${f}`)
|
ffmpeg(`./public/uploads/${f}`)
|
||||||
.complexFilter('[0:a]aformat=channel_layouts=mono,compand=gain=-6,showwavespic=s=600x120:colors=#9cf42f[fg];color=s=600x120:color=#44582c,drawgrid=width=iw/10:height=ih/5:color=#9cf42f@0.1[bg];[bg][fg]overlay=format=rgb,drawbox=x=(iw-w)/2:y=(ih-h)/2:w=iw:h=1:color=#9cf42f')
|
.complexFilter('[0:a]aformat=channel_layouts=mono,compand=gain=-6,showwavespic=s=600x120:colors=#9cf42f[fg];color=s=600x120:color=#44582c,drawgrid=width=iw/10:height=ih/5:color=#9cf42f@0.1[bg];[bg][fg]overlay=format=rgb,drawbox=x=(iw-w)/2:y=(ih-h)/2:w=iw:h=1:color=#9cf42f')
|
||||||
.frames(1)
|
.frames(1)
|
||||||
.save(`./public/thumbnail/${f.replace(path.extname(f), '.mp4')}`)
|
.on('error', function(err, stdout, stderr) {
|
||||||
|
return console.log('Cannot process video: ' + err.message);
|
||||||
|
})
|
||||||
|
.save(`./public/thumbnail/${f.replace(path.extname(f), '.png')}`)
|
||||||
}
|
}
|
||||||
|
|
||||||
async function generateThumbnail(f) {
|
async function generateThumbnail(f) {
|
||||||
|
@ -299,6 +312,9 @@ async function generateThumbnail(f) {
|
||||||
size: '720x480',
|
size: '720x480',
|
||||||
folder: './public/thumbnail/',
|
folder: './public/thumbnail/',
|
||||||
filename: f.replace(path.extname(f), '.png')
|
filename: f.replace(path.extname(f), '.png')
|
||||||
|
})
|
||||||
|
.on('error', function(err, stdout, stderr) {
|
||||||
|
return console.log('Cannot process video: ' + err.message);
|
||||||
});
|
});
|
||||||
|
|
||||||
if (!fs.existsSync(`./public/thumbnail/tmp/${f}`))
|
if (!fs.existsSync(`./public/thumbnail/tmp/${f}`))
|
||||||
|
@ -310,8 +326,7 @@ async function generateThumbnail(f) {
|
||||||
.complexFilter('fps=fps=1/10')
|
.complexFilter('fps=fps=1/10')
|
||||||
.save(`./public/thumbnail/tmp/${f}/%03d.png`)
|
.save(`./public/thumbnail/tmp/${f}/%03d.png`)
|
||||||
.on('error', function(err, stdout, stderr) {
|
.on('error', function(err, stdout, stderr) {
|
||||||
console.log('Cannot process video: ' + err.message);
|
return console.log('Cannot process video: ' + err.message);
|
||||||
return;
|
|
||||||
})
|
})
|
||||||
.on('end', () => {
|
.on('end', () => {
|
||||||
ffmpeg(`./public/thumbnail/tmp/${f}/%03d.png`)
|
ffmpeg(`./public/thumbnail/tmp/${f}/%03d.png`)
|
||||||
|
@ -319,8 +334,7 @@ async function generateThumbnail(f) {
|
||||||
.format('mp4')
|
.format('mp4')
|
||||||
.save(`./public/thumbnail/${f}`)
|
.save(`./public/thumbnail/${f}`)
|
||||||
.on('error', function(err, stdout, stderr) {
|
.on('error', function(err, stdout, stderr) {
|
||||||
console.log('Cannot process video: ' + err.message);
|
return console.log('Cannot process video: ' + err.message);
|
||||||
return;
|
|
||||||
})
|
})
|
||||||
.on('end', () => {
|
.on('end', () => {
|
||||||
// Save space by deleting tmp directory
|
// Save space by deleting tmp directory
|
||||||
|
@ -329,7 +343,6 @@ async function generateThumbnail(f) {
|
||||||
fs.unlinkSync(`./public/thumbnail/tmp/${f}/${files}`);
|
fs.unlinkSync(`./public/thumbnail/tmp/${f}/${files}`);
|
||||||
}
|
}
|
||||||
fs.rmdirSync(`./public/thumbnail/tmp/${f}`);
|
fs.rmdirSync(`./public/thumbnail/tmp/${f}`);
|
||||||
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue