mirror of
https://github.com/LuanRT/YouTube.js.git
synced 2026-06-19 04:21:35 +00:00
feat(FormatUtils): choose more specific format by itag or codec (#884)
This commit is contained in:
@@ -5,6 +5,10 @@ export type URLTransformer = (url: URL) => URL;
|
||||
export type FormatFilter = (format: Format) => boolean;
|
||||
|
||||
export interface FormatOptions {
|
||||
/**
|
||||
* Video or audio itag
|
||||
*/
|
||||
itag?: number;
|
||||
/**
|
||||
* Video quality; 360p, 720p, 1080p, etc... also accepts 'best' and 'bestefficiency'.
|
||||
*/
|
||||
@@ -21,6 +25,10 @@ export interface FormatOptions {
|
||||
* File format, use 'any' to download any format
|
||||
*/
|
||||
format?: string;
|
||||
/**
|
||||
* Video or audio codec, e.g. 'avc', 'vp9', 'av01' for video, 'opus', 'mp4a' for audio
|
||||
*/
|
||||
codec?: string;
|
||||
/**
|
||||
* InnerTube client.
|
||||
*/
|
||||
@@ -35,4 +43,4 @@ export interface DownloadOptions extends FormatOptions {
|
||||
start: number;
|
||||
end: number;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -155,10 +155,14 @@ export function chooseFormat(options: FormatOptions, streaming_data?: IStreaming
|
||||
const use_most_efficient = quality !== 'best';
|
||||
|
||||
let candidates = formats.filter((format) => {
|
||||
if (options.itag && format.itag !== options.itag)
|
||||
return false;
|
||||
if (requires_audio && !format.has_audio)
|
||||
return false;
|
||||
if (requires_video && !format.has_video)
|
||||
return false;
|
||||
if (options.codec && !format.mime_type.includes(options.codec))
|
||||
return false;
|
||||
if (options.format !== 'any' && !format.mime_type.includes(options.format || 'mp4'))
|
||||
return false;
|
||||
if (!is_best && format.quality_label !== quality)
|
||||
|
||||
Reference in New Issue
Block a user