mirror of
https://github.com/LuanRT/YouTube.js.git
synced 2026-06-13 01:22:11 +00:00
Downloading Videos
With YouTube.js you can consume videos in your applications as Node Streams.
import Innertube from 'youtubei.js';
const yt = await new Innertube();
// Downloading videos returns a Node Stream which you can consume
const stream = yt.download('VIDEO_ID');
// Alternatively, you may want more info before downloading
const info = await yt.getInfo('VIDEO_ID');
// Then you may request a download stream
const stream_from_info = yt.download();
Download Methods
There are two options for downloading a video:
Innertube.download(video_id: string, options?: DownloadOptions)VideoInfo.download(options?: DownloadOptions)
The download methods are identical, but the first one is a convenience method for the second one.
Download Options
The DownloadOptions object is used to choose the format for download
format: The format of the video to download. Use'any'to pick any format available. (default:'mp4')quality: The quality of the video to download. (default:'360p') There's some options:'best': The best quality available. Picks the highest dimensions and highest bitrate stream.'bestefficiency': The best quality available. Picks the highest dimensions and lowest bitrate stream.- You may also filter via quality labels such as
'720p'or'1080p'.
type: The type of the video to download. (default:'videoandaudio')'videoandaudio': Download both video and audio.'video': Download only video.'audio': Download only audio.
range: The range of the video to download. (default:undefined)range.start: First byte to download.range.end: Last byte to download.
Download Events
In addition to the normal events emitted by Node Streams, YouTube.js also emits the following events on the stream:
info: Emitted when the video metadata is available. (only emiited withInnertube.downloadnot withVideoInfo.download)progress: Emitted when the video is downloading.start: Emitted when the video starts downloading.
stream.on('info', (info) => {
// `info` is an instance of VideoDetails as returned by Innertube.getBasicInfo() and is thus not complete with all the details.
});
stream.on('progress', (progress) => {
// The progress object has the following properties
// progress.size - size of the video in megabytes as string
// progress.percent - percentage of the video downloaded as string
// progress.chunk_size - size of the last chunk downloaded as bytes
// progress.downloaded_size - size of the video downloaded in megabytes as string
// progress.raw_data.chunk_size - size of the last chunk downloaded as bytes
// progress.raw_data.downloaded_size - size of the video downloaded as bytes
// progress.raw_data.size - size of the response range in bytes
});
stream.on('start', () => {
// start does not have any data
});
Aborting Downloads
The download stream may be aborted by calling stream.cancel()