3.0.1 • Published 4 days ago

youtube-dl-exec v3.0.1

Weekly downloads
-
License
MIT
Repository
github
Last release
4 days ago

Last version Coverage Status NPM Status

A simple Node.js wrapper for yt-dlp.

Why

  • Auto install the latest yt-dlp version available.
  • Executes any command in an efficient way.
  • Promise & Stream interface support.

Install

Note: It requires Python 3.7 or above available in your system as python3. Otherwise, the library will throw an error.

$ npm install youtube-dl-exec --save

By default, the library will auto-install the latest yt-dlp available that will downloaded on build time.

Usage

Any yt-dlp flags is supported:

const youtubedl = require('youtube-dl-exec')

youtubedl('https://www.youtube.com/watch?v=6xKWiCMKKJg', {
  dumpSingleJson: true,
  noCheckCertificates: true,
  noWarnings: true,
  preferFreeFormats: true,
  addHeader: ['referer:youtube.com', 'user-agent:googlebot']
}).then(output => console.log(output))

It's equivalent to:

$ ./bin/yt-dlp \
  --dump-single-json \
  --no-check-certificates \
  --no-warnings \
  --prefer-free-formats \
  --add-header='user-agent:googlebot' \
  --add-header='referer:youtube.com' \
  'https://www.youtube.com/watch?v=6xKWiCMKKJg'

Type yt-dlp --help for seeing all of them.

Custom binary

In case you need, you can specify your own binary path using .create:

const { create: createYoutubeDl } = require('youtube-dl-exec')
const youtubedl = createYoutubeDl('/my/binary/path')

Progress bar

Since the library is returning a promise, you can use any library that makes a progress estimation taking a promise as input:

const logger = require('progress-estimator')()
const youtubedl = require('youtube-dl-exec')

const url = 'https://www.youtube.com/watch?v=6xKWiCMKKJg'
const promise = youtubedl(url, { dumpSingleJson: true })
const result = await logger(promise, `Obtaining ${url}`)

console.log(result)

Alternatively, you can access to the subprocess to have more granular control. See youtubedl.exec.

Also, combine that with YOUTUBE_DL_SKIP_DOWNLOAD. See environment variables to know more.

Timeout & cancellation

You can customize spawn#options by passing a third argument:

const url = 'https://www.youtube.com/watch?v=6xKWiCMKKJg'
const result = await youtubedl.exec(url, ,{ dumpSingleJson: true }, {
  timeout: 5000,
  killSignal: 'SIGKILL'
})

console.log(result)

You can also interact with the subprocess programmatically:

const url = 'https://www.youtube.com/watch?v=6xKWiCMKKJg'
const subprocess = youtubedl.exec(url, { dumpSingleJson: true })

setTimeout(() => {
  subprocess.kill('SIGKILL')
}, 5000)

const result = await subprocess
console.log(result)

API

youtubedl(url, flags, options)

It execs any yt-dlp command, returning back the output.

url

Required Type: string

The URL to target.

flags

Type: object

Any flag supported by yt-dlp.

options

Any option provided here will passed to spawn#options.

youtubedl.exec(url, flags, options)

Similar to main method but instead of a parsed output, it will return the internal subprocess object:

const youtubedl = require('youtube-dl-exec')
const fs = require('fs')

const subprocess = youtubedl.exec(
  'https://www.youtube.com/watch?v=6xKWiCMKKJg',
  {
    dumpSingleJson: true
  }
)

console.log(`Running subprocess as ${subprocess.pid}`)

subprocess.stdout.pipe(fs.createWriteStream('stdout.txt'))
subprocess.stderr.pipe(fs.createWriteStream('stderr.txt'))

setTimeout(subprocess.cancel, 30000)

youtubedl.create(binaryPath)

It creates a yt-dlp using the binaryPath provided.

Environment variables

The environment variables are taken into account when you perform a npm install in a project that contains youtube-dl-exec dependency.

These environment variables can also be set through "npm config", for example npm install --YOUTUBE_DL_HOST="Some URL", or store it in .npmrc file.

They setup the download configuration for getting the yt-dlp binary file.

DEBUG

Set DEBUG="youtube-dl-exec*" to enable debug mode. This will enable log additional information during the post-install script.

YOUTUBE_DL_DIR

It determines the folder where to put the binary file.

The default folder is bin.

YOUTUBE_DL_FILENAME

It determines the binary filename.

The default binary file could be yt-dlp or youtube-dl.exe, depending of the YOUTUBE_DL_PLATFORM value.

YOUTUBE_DL_HOST

It determines the remote URL for getting the yt-dlp binary file.

The default URL is yt-dlp/yt-dlp latest release.

YOUTUBE_DL_PLATFORM

It determines the architecture of the machine that will use the yt-dlp binary.

The default value will computed from process.platform, being 'unix' or 'win32'.

YOUTUBE_DL_SKIP_DOWNLOAD

When is present, it will skip the postinstall script for fetching the latest yt-dlp version.

That variable should be set before performing the installation command, such as:

YOUTUBE_DL_SKIP_DOWNLOAD=true npm install

YOUTUBE_DL_SKIP_PYTHON_CHECK

When is present, it skip the python step on installation.

License

youtube-dl-exec © microlink.io, released under the MIT License. Authored and maintained by Kiko Beats with help from contributors.

microlink.io · GitHub microlink.io · Twitter @microlinkhq

3.0.1

4 days ago

3.0.0

24 days ago

2.5.8

1 month ago

2.5.7

3 months ago

2.5.6

4 months ago

2.5.5

4 months ago

2.5.4

4 months ago

2.5.3

5 months ago

2.5.0

5 months ago

2.5.2

5 months ago

2.5.1

5 months ago

2.4.18

5 months ago

2.4.17

6 months ago

2.4.16

7 months ago

2.4.5

11 months ago

2.4.4

11 months ago

2.4.14

7 months ago

2.4.13

8 months ago

2.4.15

7 months ago

2.4.10

8 months ago

2.4.12

8 months ago

2.4.11

8 months ago

2.4.7

9 months ago

2.4.6

10 months ago

2.4.9

8 months ago

2.4.8

8 months ago

2.4.1

1 year ago

2.2.3

1 year ago

2.4.0

1 year ago

2.4.3

12 months ago

2.4.2

12 months ago

2.3.0

1 year ago

2.3.1

1 year ago

2.4.0-beta.0

1 year ago

2.1.9

1 year ago

2.1.10

1 year ago

2.1.11

1 year ago

2.1.8

2 years ago

2.1.7

2 years ago

2.1.6

2 years ago

2.1.2

2 years ago

2.1.1

2 years ago

2.1.4

2 years ago

2.0.13

2 years ago

2.1.3

2 years ago

2.0.14

2 years ago

2.1.5

2 years ago

2.1.0

2 years ago

2.0.12

2 years ago

2.0.11

2 years ago

2.0.9

2 years ago

2.0.10

2 years ago

2.0.8

2 years ago

2.0.7

2 years ago

2.0.3

2 years ago

2.0.2

2 years ago

2.0.5

2 years ago

2.0.4

2 years ago

2.0.6

2 years ago

2.0.1

2 years ago

1.3.4

2 years ago

2.0.0

2 years ago

1.3.3

3 years ago

1.3.2

3 years ago

1.3.1

3 years ago

1.3.0

3 years ago

1.2.14

3 years ago

1.2.12

3 years ago

1.2.13

3 years ago

1.2.8

3 years ago

1.2.7

3 years ago

1.2.9

3 years ago

1.2.10

3 years ago

1.2.11

3 years ago

1.2.6

3 years ago

1.2.5

3 years ago

1.2.4

3 years ago

1.2.3

3 years ago

1.2.2

3 years ago

1.2.1

3 years ago

1.2.0

3 years ago

1.1.3

3 years ago

1.1.2

3 years ago

1.1.1

3 years ago

1.1.0

3 years ago

1.0.0

3 years ago

0.0.1

3 years ago

0.0.0

3 years ago