From 7d5d7f22ffb2ee4bbe6680d7fabea0329be79457 Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Tue, 29 Oct 2024 16:32:35 +0100 Subject: [PATCH] Fix transcoding resolutions when audio is enabled --- .../src/api/transcoding/transcoder-limits.ts | 17 +++++++++++++++++ .../lib/transcoding/transcoding-resolutions.ts | 7 +++++-- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/packages/tests/src/api/transcoding/transcoder-limits.ts b/packages/tests/src/api/transcoding/transcoder-limits.ts index 8189b8673..8e786b6b1 100644 --- a/packages/tests/src/api/transcoding/transcoder-limits.ts +++ b/packages/tests/src/api/transcoding/transcoder-limits.ts @@ -290,6 +290,23 @@ describe('Test video transcoding limits', function () { expect(video.files[0].resolution.id).to.equal(720) expect(hlsFiles[0].resolution.id).to.equal(720) }) + + it('Should keep input resolution if only upper resolutions are enabled', async function () { + this.timeout(120_000) + + await servers[0].config.enableTranscoding({ resolutions: [ 0, 1080 ], keepOriginal: false }) + + const { uuid } = await servers[0].videos.quickUpload({ name: 'video', fixture: 'video_short.webm' }) + await waitJobs(servers) + + const video = await servers[0].videos.get({ id: uuid }) + const hlsFiles = video.streamingPlaylists[0].files + + expect(video.files).to.have.lengthOf(2) + expect(hlsFiles).to.have.lengthOf(2) + + expect(getAllFiles(video).map(f => f.resolution.id)).to.have.members([ 720, 720, 0, 0 ]) + }) }) after(async function () { diff --git a/server/core/lib/transcoding/transcoding-resolutions.ts b/server/core/lib/transcoding/transcoding-resolutions.ts index b1c55edf9..93c58491e 100644 --- a/server/core/lib/transcoding/transcoding-resolutions.ts +++ b/server/core/lib/transcoding/transcoding-resolutions.ts @@ -16,7 +16,10 @@ export function buildOriginalFileResolution (inputResolution: number) { hasAudio: true }) - if (resolutions.length === 0) { + if ( + resolutions.length === 0 || + (resolutions.length === 1 && resolutions[0] === VideoResolution.H_NOVIDEO) + ) { return toEven(inputResolution) } @@ -58,7 +61,7 @@ export function computeResolutionsToTranscode (options: { if (input < resolution) continue // We only want lower resolutions than input file if (strictLower && input === resolution) continue - // Audio resolutio but no audio in the video + // Audio resolution but no audio in the video if (resolution === VideoResolution.H_NOVIDEO && !hasAudio) continue resolutionsEnabled.add(resolution)