From 5e2afe4290103bf0d54ae7b3e62781f2a00487c9 Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Fri, 5 Aug 2022 15:05:20 +0200 Subject: Limit import depending on transcoding resolutions --- server/helpers/youtube-dl/youtube-dl-cli.ts | 30 ++++++++++++++++--------- server/helpers/youtube-dl/youtube-dl-wrapper.ts | 10 ++++++--- 2 files changed, 26 insertions(+), 14 deletions(-) (limited to 'server/helpers/youtube-dl') diff --git a/server/helpers/youtube-dl/youtube-dl-cli.ts b/server/helpers/youtube-dl/youtube-dl-cli.ts index 728f096b5..13c990a1e 100644 --- a/server/helpers/youtube-dl/youtube-dl-cli.ts +++ b/server/helpers/youtube-dl/youtube-dl-cli.ts @@ -57,7 +57,7 @@ export class YoutubeDLCLI { } } - static getYoutubeDLVideoFormat (enabledResolutions: VideoResolution[]) { + static getYoutubeDLVideoFormat (enabledResolutions: VideoResolution[], useBestFormat: boolean) { /** * list of format selectors in order or preference * see https://github.com/ytdl-org/youtube-dl#format-selection @@ -69,18 +69,26 @@ export class YoutubeDLCLI { * * in any case we avoid AV1, see https://github.com/Chocobozzz/PeerTube/issues/3499 **/ - const resolution = enabledResolutions.length === 0 - ? VideoResolution.H_720P - : Math.max(...enabledResolutions) - - return [ - `bestvideo[vcodec^=avc1][height=${resolution}]+bestaudio[ext=m4a]`, // case #1 - `bestvideo[vcodec!*=av01][vcodec!*=vp9.2][height=${resolution}]+bestaudio`, // case #2 - `bestvideo[vcodec^=avc1][height<=${resolution}]+bestaudio[ext=m4a]`, // case #3 - `bestvideo[vcodec!*=av01][vcodec!*=vp9.2]+bestaudio`, + + let result: string[] = [] + + if (!useBestFormat) { + const resolution = enabledResolutions.length === 0 + ? VideoResolution.H_720P + : Math.max(...enabledResolutions) + + result = [ + `bestvideo[vcodec^=avc1][height=${resolution}]+bestaudio[ext=m4a]`, // case #1 + `bestvideo[vcodec!*=av01][vcodec!*=vp9.2][height=${resolution}]+bestaudio`, // case #2 + `bestvideo[vcodec^=avc1][height<=${resolution}]+bestaudio[ext=m4a]` // case # + ] + } + + return result.concat([ + 'bestvideo[vcodec!*=av01][vcodec!*=vp9.2]+bestaudio', 'best[vcodec!*=av01][vcodec!*=vp9.2]', // case fallback for known formats 'best' // Ultimate fallback - ].join('/') + ]).join('/') } private constructor () { diff --git a/server/helpers/youtube-dl/youtube-dl-wrapper.ts b/server/helpers/youtube-dl/youtube-dl-wrapper.ts index d585e9a95..176cf3b69 100644 --- a/server/helpers/youtube-dl/youtube-dl-wrapper.ts +++ b/server/helpers/youtube-dl/youtube-dl-wrapper.ts @@ -21,7 +21,11 @@ const processOptions = { class YoutubeDLWrapper { - constructor (private readonly url: string = '', private readonly enabledResolutions: number[] = []) { + constructor ( + private readonly url: string, + private readonly enabledResolutions: number[], + private readonly useBestFormat: boolean + ) { } @@ -30,7 +34,7 @@ class YoutubeDLWrapper { const info = await youtubeDL.getInfo({ url: this.url, - format: YoutubeDLCLI.getYoutubeDLVideoFormat(this.enabledResolutions), + format: YoutubeDLCLI.getYoutubeDLVideoFormat(this.enabledResolutions, this.useBestFormat), additionalYoutubeDLArgs: youtubeDLArgs, processOptions }) @@ -80,7 +84,7 @@ class YoutubeDLWrapper { try { await youtubeDL.download({ url: this.url, - format: YoutubeDLCLI.getYoutubeDLVideoFormat(this.enabledResolutions), + format: YoutubeDLCLI.getYoutubeDLVideoFormat(this.enabledResolutions, this.useBestFormat), output: pathWithoutExtension, timeout, processOptions -- cgit v1.2.3