avoid ffmpeg and audio if audio already there
This commit is contained in:
parent
bab9a0ad4c
commit
2aca36295a
68
index.js
68
index.js
|
@ -122,7 +122,7 @@ app.get('/videos/:id', async (req, res) => {
|
||||||
|
|
||||||
app.ws('/download/:id/:quality', async (ws, req) => {
|
app.ws('/download/:id/:quality', async (ws, req) => {
|
||||||
const yt = await Innertube.create();
|
const yt = await Innertube.create();
|
||||||
const info = await yt.getInfo(req.params.id, 'ANDROID');
|
const info = await yt.getInfo(req.params.id, 'WEB_EMBEDDED');
|
||||||
|
|
||||||
const videoOptions = {
|
const videoOptions = {
|
||||||
format: 'mp4',
|
format: 'mp4',
|
||||||
|
@ -153,39 +153,43 @@ app.ws('/download/:id/:quality', async (ws, req) => {
|
||||||
ws.send(`[video] ${(progress * 100).toFixed(2)}% of ${hr.fromBytes(videoTotal)} at ${speedInMBps.toFixed(2)} MB/s ETA ${secondsToTime(remainingTime.toFixed(0))}`)
|
ws.send(`[video] ${(progress * 100).toFixed(2)}% of ${hr.fromBytes(videoTotal)} at ${speedInMBps.toFixed(2)} MB/s ETA ${secondsToTime(remainingTime.toFixed(0))}`)
|
||||||
}
|
}
|
||||||
|
|
||||||
ws.send('The video has been downloaded. Downloading the audio.')
|
ws.send(`The video has been downloaded. ${!videoFormat.has_audio ? ' Downloading the audio.' : ''}`)
|
||||||
|
|
||||||
const audioOptions = {
|
if (!videoFormat.has_audio) {
|
||||||
type: 'audio',
|
const audioOptions = {
|
||||||
quality: 'bestefficiency'
|
type: 'audio',
|
||||||
|
quality: 'bestefficiency'
|
||||||
|
}
|
||||||
|
const audioFormat = info.chooseFormat(audioOptions)
|
||||||
|
const audioStream = await info.download(audioOptions)
|
||||||
|
const audioWriteStream = fs.createWriteStream(`./output/${req.params.id}_audio.mp4`)
|
||||||
|
|
||||||
|
let audioTotal = audioFormat.content_length;
|
||||||
|
let audioDownloaded = 0;
|
||||||
|
let audioStartTime = Date.now();
|
||||||
|
const audioPrecentages = []
|
||||||
|
|
||||||
|
for await (const chunk of Utils.streamToIterable(audioStream)) {
|
||||||
|
audioWriteStream.write(chunk);
|
||||||
|
audioDownloaded += chunk.length;
|
||||||
|
|
||||||
|
let elapsedTime = (Date.now() - audioStartTime) / 1000;
|
||||||
|
let progress = audioDownloaded / audioTotal;
|
||||||
|
let speedInMBps = (audioDownloaded / (1024 * 1024)) / elapsedTime;
|
||||||
|
let remainingTime = (audioTotal - audioDownloaded) / (speedInMBps * 1024 * 1024);
|
||||||
|
|
||||||
|
if (audioPrecentages.includes((progress*100).toFixed(0))) continue
|
||||||
|
audioPrecentages.push((progress*100).toFixed(0))
|
||||||
|
|
||||||
|
ws.send(`[audio] ${(progress * 100).toFixed(2)}% of ${hr.fromBytes(audioTotal)} at ${speedInMBps.toFixed(2)} MB/s ETA ${secondsToTime(remainingTime.toFixed(0))}`)
|
||||||
|
}
|
||||||
|
|
||||||
|
ws.send('Downloaded video and audio. Merging them together.')
|
||||||
|
|
||||||
|
await mergeIt(`./output/${req.params.id}_audio.mp4`, `./output/${req.params.id}_video.mp4`, `./output/${req.params.id}.mp4`)
|
||||||
|
} else {
|
||||||
|
fs.renameSync(`./output/${req.params.id}_video.mp4`, `./output/${req.params.id}.mp4`)
|
||||||
}
|
}
|
||||||
const audioFormat = info.chooseFormat(audioOptions)
|
|
||||||
const audioStream = await info.download(audioOptions)
|
|
||||||
const audioWriteStream = fs.createWriteStream(`./output/${req.params.id}_audio.mp4`)
|
|
||||||
|
|
||||||
let audioTotal = audioFormat.content_length;
|
|
||||||
let audioDownloaded = 0;
|
|
||||||
let audioStartTime = Date.now();
|
|
||||||
const audioPrecentages = []
|
|
||||||
|
|
||||||
for await (const chunk of Utils.streamToIterable(audioStream)) {
|
|
||||||
audioWriteStream.write(chunk);
|
|
||||||
audioDownloaded += chunk.length;
|
|
||||||
|
|
||||||
let elapsedTime = (Date.now() - audioStartTime) / 1000;
|
|
||||||
let progress = audioDownloaded / audioTotal;
|
|
||||||
let speedInMBps = (audioDownloaded / (1024 * 1024)) / elapsedTime;
|
|
||||||
let remainingTime = (audioTotal - audioDownloaded) / (speedInMBps * 1024 * 1024);
|
|
||||||
|
|
||||||
if (audioPrecentages.includes((progress*100).toFixed(0))) continue
|
|
||||||
audioPrecentages.push((progress*100).toFixed(0))
|
|
||||||
|
|
||||||
ws.send(`[audio] ${(progress * 100).toFixed(2)}% of ${hr.fromBytes(audioTotal)} at ${speedInMBps.toFixed(2)} MB/s ETA ${secondsToTime(remainingTime.toFixed(0))}`)
|
|
||||||
}
|
|
||||||
|
|
||||||
ws.send('Downloaded video and audio. Merging them together.')
|
|
||||||
|
|
||||||
await mergeIt(`./output/${req.params.id}_audio.mp4`, `./output/${req.params.id}_video.mp4`, `./output/${req.params.id}.mp4`)
|
|
||||||
|
|
||||||
if (fs.existsSync(`./output/${req.params.id}_audio.mp4`)) fs.rmSync(`./output/${req.params.id}_audio.mp4`)
|
if (fs.existsSync(`./output/${req.params.id}_audio.mp4`)) fs.rmSync(`./output/${req.params.id}_audio.mp4`)
|
||||||
if (fs.existsSync(`./output/${req.params.id}_video.mp4`)) fs.rmSync(`./output/${req.params.id}_video.mp4`)
|
if (fs.existsSync(`./output/${req.params.id}_video.mp4`)) fs.rmSync(`./output/${req.params.id}_video.mp4`)
|
||||||
|
|
Loading…
Reference in New Issue