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) => {
 | 
			
		||||
    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 = {
 | 
			
		||||
        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('The video has been downloaded. Downloading the audio.')
 | 
			
		||||
    ws.send(`The video has been downloaded. ${!videoFormat.has_audio ? ' Downloading the audio.' : ''}`)
 | 
			
		||||
 | 
			
		||||
    const audioOptions = {
 | 
			
		||||
        type: 'audio',
 | 
			
		||||
        quality: 'bestefficiency'
 | 
			
		||||
    if (!videoFormat.has_audio) {
 | 
			
		||||
        const audioOptions = {
 | 
			
		||||
            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}_video.mp4`)) fs.rmSync(`./output/${req.params.id}_video.mp4`)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue