{"_id":"@blitz_cloud/youtube-mp3-downloader","_rev":"2-c9c676cfb3fb8e20e0ab98597ee6fe8e","name":"@blitz_cloud/youtube-mp3-downloader","dist-tags":{"latest":"0.7.13"},"versions":{"0.7.11":{"name":"@blitz_cloud/youtube-mp3-downloader","version":"0.7.11","description":"Downloads Youtube videos (in parallel, as streams), encodes the audio data as mp3 and stores them in a defineable location","keywords":["youtube","mp3","download","encode","ffmpeg","parallel","fast","streams"],"private":false,"main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"dependencies":{"async":"^3.2.4","fluent-ffmpeg":"2.1.2","progress-stream":"^2.0.0","sanitize-filename":"^1.6.3","ytdl-core":"4.10.0"},"author":{"name":"ytb2mp3"},"repository":{"type":"git","url":"git://github.com/ytb2mp3/youtube-mp3-downloader.git"},"engines":{"node":">=8.3.0"},"license":"MIT","bugs":{"url":"https://github.com/ytb2mp3/youtube-mp3-downloader/issues"},"types":"./typings/index.d.ts","homepage":"https://github.com/ytb2mp3/youtube-mp3-downloader#readme","directories":{"example":"example","lib":"lib"},"gitHead":"5d7bad44d686c2a85549c979aaf72ba58ca71c1b","_id":"@blitz_cloud/youtube-mp3-downloader@0.7.11","_nodeVersion":"20.2.0","_npmVersion":"9.6.6","dist":{"integrity":"sha512-21SJotbnI28/dyCUwkaHkecIIR+bffh7dZZqIm44cBJ6LBPLckOjYN3ymSyXODU37/2985utlmDq1rCaCLNNyw==","shasum":"dd51e5af1c84b65880a3b32ccfb10f00c74720c4","tarball":"https://registry.npmjs.org/@blitz_cloud/youtube-mp3-downloader/-/youtube-mp3-downloader-0.7.11.tgz","fileCount":7,"unpackedSize":15610,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDT+G+0X9k5wZqlGRGFQZiSBDHtU/PB9CFqwSPx8hbHyAiBXij/1PcdnZoQnFs/q5s7sMvunu5JDrDsBlcDPr2gNjw=="}]},"_npmUser":{"name":"blitz_cloud","email":"ionutp626@gmail.com"},"maintainers":[{"name":"blitz_cloud","email":"ionutp626@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/youtube-mp3-downloader_0.7.11_1685011185296_0.5185654112203699"},"_hasShrinkwrap":false},"0.7.12":{"name":"@blitz_cloud/youtube-mp3-downloader","version":"0.7.12","description":"Downloads Youtube videos (in parallel, as streams), encodes the audio data as mp3 and stores them in a defineable location","keywords":["youtube","mp3","download","encode","ffmpeg","parallel","fast","streams"],"private":false,"main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"dependencies":{"async":"^3.2.4","fluent-ffmpeg":"2.1.2","progress-stream":"^2.0.0","sanitize-filename":"^1.6.3","ytdl-core":"4.10.0"},"author":{"name":"ytb2mp3"},"repository":{"type":"git","url":"git://github.com/ytb2mp3/youtube-mp3-downloader.git"},"engines":{"node":">=8.3.0"},"license":"MIT","bugs":{"url":"https://github.com/ytb2mp3/youtube-mp3-downloader/issues"},"types":"./typings/index.d.ts","homepage":"https://github.com/ytb2mp3/youtube-mp3-downloader#readme","directories":{"example":"example","lib":"lib"},"gitHead":"8b40d875cc2932ca40114ce2ee5453cab139e250","_id":"@blitz_cloud/youtube-mp3-downloader@0.7.12","_nodeVersion":"20.2.0","_npmVersion":"9.6.6","dist":{"integrity":"sha512-/H7ccDAl7Gt5N9i33Sd1wbfJBZdm/rFWvzGLxG1TzU9ljTFvGMrakkV7KMdSX9kTzyOWFmdHfLpn6IQGrMAGxQ==","shasum":"05ced8aab5cda57d273fb8158bab065e1f607b72","tarball":"https://registry.npmjs.org/@blitz_cloud/youtube-mp3-downloader/-/youtube-mp3-downloader-0.7.12.tgz","fileCount":7,"unpackedSize":16292,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID9evwbs9JscuR4ywsXHVTxWSPlJ0BEvjYv/SPBMFIaKAiAJJT288KCuizAveufgICTfNIL+yjg6XXVQ1YpLgD09rA=="}]},"_npmUser":{"name":"blitz_cloud","email":"ionutp626@gmail.com"},"maintainers":[{"name":"blitz_cloud","email":"ionutp626@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/youtube-mp3-downloader_0.7.12_1689854418953_0.06278342702428108"},"_hasShrinkwrap":false},"0.7.13":{"name":"@blitz_cloud/youtube-mp3-downloader","version":"0.7.13","description":"Downloads Youtube videos (in parallel, as streams), encodes the audio data as mp3 and stores them in a defineable location","keywords":["youtube","mp3","download","encode","ffmpeg","parallel","fast","streams"],"private":false,"main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"dependencies":{"async":"^3.2.4","fluent-ffmpeg":"2.1.2","progress-stream":"^2.0.0","sanitize-filename":"^1.6.3","ytdl-core":"4.10.0"},"author":{"name":"ytb2mp3"},"repository":{"type":"git","url":"git://github.com/ytb2mp3/youtube-mp3-downloader.git"},"engines":{"node":">=8.3.0"},"license":"MIT","bugs":{"url":"https://github.com/ytb2mp3/youtube-mp3-downloader/issues"},"types":"./typings/index.d.ts","homepage":"https://github.com/ytb2mp3/youtube-mp3-downloader#readme","directories":{"example":"example","lib":"lib"},"gitHead":"ea31e57d8b82df84c41d6d95367d158e4c5d32b5","_id":"@blitz_cloud/youtube-mp3-downloader@0.7.13","_nodeVersion":"20.2.0","_npmVersion":"9.6.6","dist":{"integrity":"sha512-DNJmNE/b8TnUyCmdZEw7skXz0G7qc0EiFA6oO/WCb/ATad2N6hi0cbWVFip9J06/OBFGyZpK/84NLlHNuiwyrg==","shasum":"4c9c96a5343ed7dc56eb31ee6572d2f97338b280","tarball":"https://registry.npmjs.org/@blitz_cloud/youtube-mp3-downloader/-/youtube-mp3-downloader-0.7.13.tgz","fileCount":7,"unpackedSize":16318,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEvXk03l1dd8RG5wXHTDZE827VN3LkirsA781+EiPNuoAiBk3EZOyJU9/gzJD2hLbb5n/7C+Vj5gu666FBhf/JY2/Q=="}]},"_npmUser":{"name":"blitz_cloud","email":"ionutp626@gmail.com"},"maintainers":[{"name":"blitz_cloud","email":"ionutp626@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/youtube-mp3-downloader_0.7.13_1689858517101_0.05462995286553629"},"_hasShrinkwrap":false}},"time":{"created":"2023-05-25T10:39:45.196Z","0.7.11":"2023-05-25T10:39:45.461Z","modified":"2023-07-20T13:08:37.498Z","0.7.12":"2023-07-20T12:00:19.168Z","0.7.13":"2023-07-20T13:08:37.280Z"},"maintainers":[{"name":"blitz_cloud","email":"ionutp626@gmail.com"}],"description":"Downloads Youtube videos (in parallel, as streams), encodes the audio data as mp3 and stores them in a defineable location","homepage":"https://github.com/ytb2mp3/youtube-mp3-downloader#readme","keywords":["youtube","mp3","download","encode","ffmpeg","parallel","fast","streams"],"repository":{"type":"git","url":"git://github.com/ytb2mp3/youtube-mp3-downloader.git"},"author":{"name":"ytb2mp3"},"bugs":{"url":"https://github.com/ytb2mp3/youtube-mp3-downloader/issues"},"license":"MIT","readme":"# Youtube MP3 Downloader\r\n\r\nYoutube MP3 Downloader is a module which allows to specify YouTube videos from which the audio data should be extracted, converted to MP3, and stored on disk.\r\n\r\n## Installation\r\n\r\n### Prerequisites\r\n\r\nTo run this project, you need to have a local installation of FFmpeg present on your system. You can download it from https://www.ffmpeg.org/download.html\r\n\r\n### Installation via NPM\r\n\r\n`npm install youtube-mp3-downloader --save`\r\n\r\n### Installation from Github\r\n\r\n#### Checkout the project from Github to a local folder\r\n\r\n`git clone https://github.com/ytb2mp3/youtube-mp3-downloader.git`\r\n\r\n#### Install module dependencies\r\n\r\nNavigate to the folder where you checked out the project to in your console. Run `npm install`.\r\n\r\n## Running\r\n\r\n### Basic example\r\n\r\nA basic usage example is the following:\r\n\r\n```javascript\r\nvar YoutubeMp3Downloader = require(\"youtube-mp3-downloader\");\r\n\r\n//Configure YoutubeMp3Downloader with your settings\r\nvar YD = new YoutubeMp3Downloader({\r\n    \"ffmpegPath\": \"/path/to/ffmpeg\",        // FFmpeg binary location\r\n    \"outputPath\": \"/path/to/mp3/folder\",    // Output file location (default: the home directory)\r\n    \"youtubeVideoQuality\": \"highestaudio\",  // Desired video quality (default: highestaudio)\r\n    \"queueParallelism\": 2,                  // Download parallelism (default: 1)\r\n    \"progressTimeout\": 2000,                // Interval in ms for the progress reports (default: 1000)\r\n    \"allowWebm\": false                      // Enable download from WebM sources (default: false)\r\n});\r\n\r\n//Download video and save as MP3 file\r\nYD.download(\"Vhd6Kc4TZls\");\r\n\r\nYD.on(\"finished\", function(err, data) {\r\n    console.log(JSON.stringify(data));\r\n});\r\n\r\nYD.on(\"error\", function(error) {\r\n    console.log(error);\r\n});\r\n\r\nYD.on(\"progress\", function(progress) {\r\n    console.log(JSON.stringify(progress));\r\n});\r\n```\r\n\r\nYou can also pass a file name for the respective video, which will then be used. Otherwise, the file name will be derived from the video title.\r\n```javascript\r\nYD.download(\"Vhd6Kc4TZls\", \"Cold Funk - Funkorama.mp3\");\r\n```\r\n\r\nWhile downloading, every `progressTimeout` timeframe, there will be an `progress` event triggered, outputting an object like\r\n\r\n```javascript\r\n{\r\n    \"videoId\": \"Vhd6Kc4TZls\",\r\n    \"progress\": {\r\n        \"percentage\": 72.29996914191304,\r\n        \"transferred\": 19559221,\r\n        \"length\": 27052876,\r\n        \"remaining\": 7493655,\r\n        \"eta\": 2,\r\n        \"runtime\": 6,\r\n        \"delta\": 6591454,\r\n        \"speed\": 3009110.923076923\r\n    }\r\n}\r\n```\r\n\r\nFurthermore, there will be a `queueSize` event emitted when the queue size changes (both positive and negative). This can be caught via\r\n\r\n```javascript\r\nYD.on(\"queueSize\", function(size) {\r\n    console.log(size);\r\n});\r\n```\r\n\r\nUpon finish, the following output will be returned:\r\n\r\n```javascript\r\n{\r\n    \"videoId\": \"Vhd6Kc4TZls\",\r\n    \"stats\": {\r\n        \"transferredBytes\": 27052876,\r\n        \"runtime\": 7,\r\n        \"averageSpeed\": 3279136.48\r\n    },\r\n    \"file\": \"/path/to/mp3/folder/Cold Funk - Funkorama.mp3\",\r\n    \"youtubeUrl\": \"http://www.youtube.com/watch?v=Vhd6Kc4TZls\",\r\n    \"videoTitle\": \"Cold Funk - Funkorama - Kevin MacLeod | YouTube Audio Library\",\r\n    \"artist\": \"Cold Funk\",\r\n    \"title\": \"Funkorama\",\r\n    \"thumbnail\": \"https://i.ytimg.com/vi/Vhd6Kc4TZls/hqdefault.jpg\"\r\n}\r\n```\r\n\r\n### Detailed example\r\n\r\nTo use it in a class which provides the downloading functionality, you could use it like the following (which can also be found in the `examples` subfolder of this project):\r\n\r\n**downloader.js**\r\n```javascript\r\nvar YoutubeMp3Downloader = require(\"youtube-mp3-downloader\");\r\n\r\nvar Downloader = function() {\r\n\r\n    var self = this;\r\n    \r\n    //Configure YoutubeMp3Downloader with your settings\r\n    self.YD = new YoutubeMp3Downloader({\r\n        \"ffmpegPath\": \"/path/to/ffmpeg\",        // FFmpeg binary location\r\n        \"outputPath\": \"/path/to/mp3/folder\",    // Output file location (default: the home directory)\r\n        \"youtubeVideoQuality\": \"highestaudio\",  // Desired video quality (default: highestaudio)\r\n        \"queueParallelism\": 2,                  // Download parallelism (default: 1)\r\n        \"progressTimeout\": 2000                 // Interval in ms for the progress reports (default: 1000)\r\n        \"outputOptions\" : [\"-af\", \"silenceremove=1:0:-50dB\"] // Additional output options passend to ffmpeg\r\n    });\r\n\r\n    self.callbacks = {};\r\n\r\n    self.YD.on(\"finished\", function(error, data) {\r\n\t\t\r\n        if (self.callbacks[data.videoId]) {\r\n            self.callbacks[data.videoId](error, data);\r\n        } else {\r\n            console.log(\"Error: No callback for videoId!\");\r\n        }\r\n    \r\n    });\r\n\r\n    self.YD.on(\"error\", function(error, data) {\r\n\t\r\n        console.error(error + \" on videoId \" + data.videoId);\r\n    \r\n        if (self.callbacks[data.videoId]) {\r\n            self.callbacks[data.videoId](error, data);\r\n        } else {\r\n            console.log(\"Error: No callback for videoId!\");\r\n        }\r\n     \r\n    });\r\n\r\n};\r\n\r\nDownloader.prototype.getMP3 = function(track, callback){\r\n\r\n    var self = this;\r\n\t\r\n    // Register callback\r\n    self.callbacks[track.videoId] = callback;\r\n    // Trigger download\r\n    self.YD.download(track.videoId, track.name);\r\n\r\n};\r\n\r\nmodule.exports = Downloader;\r\n```\r\n\r\nThis class can then be used like this:\r\n\r\n**example1.js**\r\n```javascript\r\nvar Downloader = require(\"./downloader\");\r\nvar dl = new Downloader();\r\nvar i = 0;\r\n\r\ndl.getMP3({videoId: \"Vhd6Kc4TZls\", name: \"Cold Funk - Funkorama.mp3\"}, function(err,res){\r\n    i++;\r\n    if(err)\r\n        throw err;\r\n    else{\r\n        console.log(\"Song \"+ i + \" was downloaded: \" + res.file);\r\n    }\r\n});\r\n```\r\n","readmeFilename":"README.md"}