A simple node.js wrapper for yt-dlp.
npm install yt-dlp-wrap-plusnpm i yt-dlp-wrap-plus).
typescript
import YTDlpWrap from 'yt-dlp-wrap-plus';
`
Javascript
`javascript
const YTDlpWrap = require('yt-dlp-wrap-plus').default;
//Get the data from the github releases API. In this case get page 1 with a maximum of 5 items.
let githubReleasesData = await YTDlpWrap.getGithubReleases(1, 5);
//Download the yt-dlp binary for the given version and platform to the provided path.
//By default the latest version will be downloaded to "./yt-dlp" and platform = os.platform().
await YTDlpWrap.downloadFromGithub(
'path/to/yt-dlp/binary',
'2020.06.16.1',
'win32'
);
//Init an instance with a given binary path.
//If none is provided "yt-dlp" will be used as command.
const ytDlpWrap = new YTDlpWrap('path/to/yt-dlp/binary');
//The binary path can also be changed later on.
ytDlpWrap.setBinaryPath('path/to/another/yt-dlp/binary');
`
Usage
$3
Excecute yt-dlp and returns an EventEmitter.
The ytDlpEvent event will expose all yt-dlp events, for example:
The log message [download] Destination: output.mp4 will emit the event type download and the event data Destination: output.mp4.
ytDlpEmitter.ytDlpProcess exposes the spawned yt-dlp process.
`javascript
const YTDlpWrap = require('yt-dlp-wrap-plus').default;
const ytDlpWrap = new YTDlpWrap('path/to/yt-dlp/binary');
let ytDlpEventEmitter = ytDlpWrap
.exec([
'https://www.youtube.com/watch?v=aqz-KE-bpKQ',
'-f',
'best',
'-o',
'output.mp4',
])
.on('progress', (progress) =>
console.log(
progress.percent,
progress.totalSize,
progress.currentSpeed,
progress.eta
)
)
.on('ytDlpEvent', (eventType, eventData) =>
console.log(eventType, eventData)
)
.on('error', (error) => console.error(error))
.on('close', () => console.log('all done'));
console.log(ytDlpEventEmitter.ytDlpProcess.pid);
`
$3
Excecute yt-dlp and returns an Readable Stream.
The interface works just like the EventEmitter.
`javascript
let readableStream = ytDlpWrap.execStream([
'https://www.youtube.com/watch?v=aqz-KE-bpKQ',
'-f',
'best[ext=mp4]',
]);
readableStream.pipe(fs.createWriteStream('test.mp4'));
`
$3
Excecute yt-dlp and returns an Promise.
`javascript
let stdout = await ytDlpWrap.execPromise([
'https://www.youtube.com/watch?v=aqz-KE-bpKQ',
'-f',
'best',
'-o',
'output.mp4',
]);
console.log(stdout);
`
$3
Additionally you can set the options of the spawned process and abort the process.
The abortion of the spawned process is handled by passing the signal of an AbortController.
`javascript
let controller = new AbortController();
let ytDlpEventEmitter = ytDlpWrap.exec(
[
'https://www.youtube.com/watch?v=aqz-KE-bpKQ',
'-f',
'best',
'-o',
'output.mp4',
],
{ shell: true, detached: true },
controller.signal
);
setTimeout(() => {
controller.abort();
console.log(ytDlpEventEmitter.ytDlpProcess.killed);
}, 500);
`
$3
Returns the yt-dlp --dump-json metadata as an object.
`javascript
let metadata = await ytDlpWrap.getVideoInfo(
'https://www.youtube.com/watch?v=aqz-KE-bpKQ'
);
console.log(metadata.title);
`
$3
Just a few utility functions to get informations.
`javascript
let version = await ytDlpWrap.getVersion();
let help = await ytDlpWrap.getHelp();
let extractors = await ytDlpWrap.getExtractors();
let extractorDescriptions = await ytDlpWrap.getExtractorDescriptions();
``