Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/ytb2mp3/youtube-mp3-downloader
Extract music from YouTube videos
https://github.com/ytb2mp3/youtube-mp3-downloader
downloader mp3 music youtube youtube-dl youtube-downloader
Last synced: 14 days ago
JSON representation
Extract music from YouTube videos
- Host: GitHub
- URL: https://github.com/ytb2mp3/youtube-mp3-downloader
- Owner: ytb2mp3
- License: mit
- Created: 2015-06-16T20:19:26.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2024-04-11T13:56:24.000Z (7 months ago)
- Last Synced: 2024-10-15T10:31:22.663Z (29 days ago)
- Topics: downloader, mp3, music, youtube, youtube-dl, youtube-downloader
- Language: JavaScript
- Homepage:
- Size: 66.4 KB
- Stars: 376
- Watchers: 15
- Forks: 104
- Open Issues: 11
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Youtube MP3 Downloader
Youtube 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.
## Installation
### Prerequisites
To 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
### Installation via NPM
`npm install youtube-mp3-downloader --save`
### Installation from Github
#### Checkout the project from Github to a local folder
`git clone https://github.com/ytb2mp3/youtube-mp3-downloader.git`
#### Install module dependencies
Navigate to the folder where you checked out the project to in your console. Run `npm install`.
## Running
### Basic example
A basic usage example is the following:
```javascript
var YoutubeMp3Downloader = require("youtube-mp3-downloader");//Configure YoutubeMp3Downloader with your settings
var YD = new YoutubeMp3Downloader({
"ffmpegPath": "/path/to/ffmpeg", // FFmpeg binary location
"outputPath": "/path/to/mp3/folder", // Output file location (default: the home directory)
"youtubeVideoQuality": "highestaudio", // Desired video quality (default: highestaudio)
"queueParallelism": 2, // Download parallelism (default: 1)
"progressTimeout": 2000, // Interval in ms for the progress reports (default: 1000)
"allowWebm": false // Enable download from WebM sources (default: false)
});//Download video and save as MP3 file
YD.download("Vhd6Kc4TZls");YD.on("finished", function(err, data) {
console.log(JSON.stringify(data));
});YD.on("error", function(error) {
console.log(error);
});YD.on("progress", function(progress) {
console.log(JSON.stringify(progress));
});
```You 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.
```javascript
YD.download("Vhd6Kc4TZls", "Cold Funk - Funkorama.mp3");
```While downloading, every `progressTimeout` timeframe, there will be an `progress` event triggered, outputting an object like
```javascript
{
"videoId": "Vhd6Kc4TZls",
"progress": {
"percentage": 72.29996914191304,
"transferred": 19559221,
"length": 27052876,
"remaining": 7493655,
"eta": 2,
"runtime": 6,
"delta": 6591454,
"speed": 3009110.923076923
}
}
```Furthermore, there will be a `queueSize` event emitted when the queue size changes (both positive and negative). This can be caught via
```javascript
YD.on("queueSize", function(size) {
console.log(size);
});
```Upon finish, the following output will be returned:
```javascript
{
"videoId": "Vhd6Kc4TZls",
"stats": {
"transferredBytes": 27052876,
"runtime": 7,
"averageSpeed": 3279136.48
},
"file": "/path/to/mp3/folder/Cold Funk - Funkorama.mp3",
"youtubeUrl": "http://www.youtube.com/watch?v=Vhd6Kc4TZls",
"videoTitle": "Cold Funk - Funkorama - Kevin MacLeod | YouTube Audio Library",
"artist": "Cold Funk",
"title": "Funkorama",
"thumbnail": "https://i.ytimg.com/vi/Vhd6Kc4TZls/hqdefault.jpg"
}
```### Detailed example
To 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):
**downloader.js**
```javascript
var YoutubeMp3Downloader = require("youtube-mp3-downloader");var Downloader = function() {
var self = this;
//Configure YoutubeMp3Downloader with your settings
self.YD = new YoutubeMp3Downloader({
"ffmpegPath": "/path/to/ffmpeg", // FFmpeg binary location
"outputPath": "/path/to/mp3/folder", // Output file location (default: the home directory)
"youtubeVideoQuality": "highestaudio", // Desired video quality (default: highestaudio)
"queueParallelism": 2, // Download parallelism (default: 1)
"progressTimeout": 2000 // Interval in ms for the progress reports (default: 1000)
"outputOptions" : ["-af", "silenceremove=1:0:-50dB"] // Additional output options passend to ffmpeg
});self.callbacks = {};
self.YD.on("finished", function(error, data) {
if (self.callbacks[data.videoId]) {
self.callbacks[data.videoId](error, data);
} else {
console.log("Error: No callback for videoId!");
}
});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!");
}
});};
Downloader.prototype.getMP3 = function(track, callback){
var self = this;
// Register callback
self.callbacks[track.videoId] = callback;
// Trigger download
self.YD.download(track.videoId, track.name);};
module.exports = Downloader;
```This class can then be used like this:
**example1.js**
```javascript
var Downloader = require("./downloader");
var dl = new Downloader();
var i = 0;dl.getMP3({videoId: "Vhd6Kc4TZls", name: "Cold Funk - Funkorama.mp3"}, function(err,res){
i++;
if(err)
throw err;
else{
console.log("Song "+ i + " was downloaded: " + res.file);
}
});
```