youtube-mp3-downloader
Advanced tools
Comparing version 0.4.3 to 0.4.4
@@ -59,7 +59,9 @@ "use strict"; | ||
self.downloadQueue.push(task, function (err, data) { | ||
self.emit("queueSize", self.downloadQueue.running() + self.downloadQueue.length()); | ||
if (err) { | ||
self.emit("error", err); | ||
self.emit("error", err, data); | ||
} else { | ||
self.emit('finished', data); | ||
self.emit("queueSize", self.downloadQueue.running() + self.downloadQueue.length()); | ||
self.emit('finished', err, data); | ||
} | ||
@@ -74,2 +76,5 @@ }); | ||
var videoUrl = self.youtubeBaseUrl+task.videoId; | ||
var resultObj = { | ||
videoId: task.videoId | ||
}; | ||
@@ -79,81 +84,78 @@ ytdl.getInfo(videoUrl, function(err, info){ | ||
if (err) { | ||
callback(err.message, null); | ||
} | ||
callback(err.message, resultObj); | ||
} else { | ||
var videoTitle = self.cleanFileName(info.title); | ||
var artist = "Unknown"; | ||
var title = "Unknown"; | ||
var thumbnail = info.iurlhq || null; | ||
var videoTitle = self.cleanFileName(info.title); | ||
var artist = "Unknown"; | ||
var title = "Unknown"; | ||
var thumbnail = info.iurlhq || null; | ||
if (videoTitle.indexOf("-") > -1) { | ||
var temp = videoTitle.split("-"); | ||
if (temp.length >= 2) { | ||
artist = temp[0].trim(); | ||
title = temp[1].trim(); | ||
if (videoTitle.indexOf("-") > -1) { | ||
var temp = videoTitle.split("-"); | ||
if (temp.length >= 2) { | ||
artist = temp[0].trim(); | ||
title = temp[1].trim(); | ||
} | ||
} else { | ||
title = videoTitle; | ||
} | ||
} else { | ||
title = videoTitle; | ||
} | ||
//Derive file name, if given, use it, if not, from video title | ||
var fileName = (task.fileName ? self.outputPath + '/' + task.fileName : self.outputPath + '/' + videoTitle + '.mp3'); | ||
//Derive file name, if given, use it, if not, from video title | ||
var fileName = (task.fileName ? self.outputPath + '/' + task.fileName : self.outputPath + '/' + videoTitle + '.mp3'); | ||
ytdl.getInfo(videoUrl, { quality: self.youtubeVideoQuality }, function(err, info) { | ||
ytdl.getInfo(videoUrl, { quality: self.youtubeVideoQuality }, function(err, info) { | ||
//Stream setup | ||
var stream = ytdl.downloadFromInfo(info, { | ||
quality: self.youtubeVideoQuality | ||
}); | ||
//Stream setup | ||
var stream = ytdl.downloadFromInfo(info, { | ||
quality: self.youtubeVideoQuality | ||
}); | ||
stream.on("response", function(httpResponse) { | ||
stream.on("response", function(httpResponse) { | ||
var resultObj = {}; | ||
//Setup of progress module | ||
var str = progress({ | ||
length: parseInt(httpResponse.headers['content-length']), | ||
time: self.progressTimeout | ||
}); | ||
//Setup of progress module | ||
var str = progress({ | ||
length: parseInt(httpResponse.headers['content-length']), | ||
time: self.progressTimeout | ||
}); | ||
//Add progress event listener | ||
str.on('progress', function(progress) { | ||
if (progress.percentage === 100) { | ||
resultObj.stats= { | ||
transferredBytes: progress.transferred, | ||
runtime: progress.runtime, | ||
averageSpeed: parseFloat(progress.speed.toFixed(2)) | ||
} | ||
} | ||
self.emit("progress", {videoId: task.videoId, progress: progress}) | ||
}); | ||
//Add progress event listener | ||
str.on('progress', function(progress) { | ||
if (progress.percentage === 100) { | ||
resultObj.stats= { | ||
transferredBytes: progress.transferred, | ||
runtime: progress.runtime, | ||
averageSpeed: parseFloat(progress.speed.toFixed(2)) | ||
} | ||
} | ||
self.emit("progress", {videoId: task.videoId, progress: progress}) | ||
//Start encoding | ||
var proc = new ffmpeg({ | ||
source: stream.pipe(str) | ||
}) | ||
.audioBitrate(info.formats[0].audioBitrate) | ||
.withAudioCodec('libmp3lame') | ||
.toFormat('mp3') | ||
.outputOptions('-id3v2_version', '4') | ||
.outputOptions('-metadata', 'title=' + title) | ||
.outputOptions('-metadata', 'artist=' + artist) | ||
.on('error', function(err) { | ||
callback(err.message, null); | ||
}) | ||
.on('end', function() { | ||
resultObj.file = fileName; | ||
resultObj.youtubeUrl = videoUrl; | ||
resultObj.videoTitle = videoTitle; | ||
resultObj.artist = artist; | ||
resultObj.title = title; | ||
resultObj.thumbnail = thumbnail; | ||
callback(null, resultObj); | ||
}) | ||
.saveToFile(fileName); | ||
}); | ||
//Start encoding | ||
var proc = new ffmpeg({ | ||
source: stream.pipe(str) | ||
}) | ||
.audioBitrate(info.formats[0].audioBitrate) | ||
.withAudioCodec('libmp3lame') | ||
.toFormat('mp3') | ||
.outputOptions('-id3v2_version', '4') | ||
.outputOptions('-metadata', 'title=' + title) | ||
.outputOptions('-metadata', 'artist=' + artist) | ||
.on('error', function(err) { | ||
callback(err.message, null); | ||
}) | ||
.on('end', function() { | ||
resultObj.file = fileName; | ||
resultObj.videoId = task.videoId; | ||
resultObj.youtubeUrl = videoUrl; | ||
resultObj.videoTitle = videoTitle; | ||
resultObj.artist = artist; | ||
resultObj.title = title; | ||
resultObj.thumbnail = thumbnail; | ||
callback(null, resultObj); | ||
}) | ||
.saveToFile(fileName); | ||
}); | ||
} | ||
}); | ||
}); | ||
@@ -160,0 +162,0 @@ |
{ | ||
"name": "youtube-mp3-downloader", | ||
"version": "0.4.3", | ||
"version": "0.4.4", | ||
"description": "Downloads Youtube videos (in parallel, as streams), encodes the audio data as mp3 and stores them in a defineable location", | ||
@@ -5,0 +5,0 @@ "keywords": [ |
@@ -117,2 +117,3 @@ # Youtube MP3 Downloader | ||
var Downloader = function() { | ||
var self = this; | ||
@@ -131,6 +132,6 @@ | ||
self.YD.on("finished", function(data) { | ||
self.YD.on("finished", function(error, data) { | ||
if (self.callbacks[data.videoId]) { | ||
self.callbacks[data.videoId](null,data); | ||
self.callbacks[data.videoId](error, data); | ||
} else { | ||
@@ -142,4 +143,12 @@ console.log("Error: No callback for videoId!"); | ||
self.YD.on("error", function(error) { | ||
console.log(error); | ||
self.YD.on("error", function(error, data) { | ||
console.error(error + " on videoId " + data.videoId); | ||
if (self.callbacks[data.videoId]) { | ||
self.callbacks[data.videoId](error, data); | ||
} else { | ||
console.log("Error: No callback for videoId!"); | ||
} | ||
}); | ||
@@ -150,2 +159,3 @@ | ||
Downloader.prototype.getMP3 = function(track, callback){ | ||
var self = this; | ||
@@ -152,0 +162,0 @@ |
13607
126
194