From be7bc3a6a920d33e6abf144dcd4711d68795023d Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Wed, 11 Sep 2024 14:29:51 +0200 Subject: [PATCH] More precise storyboard Prefer to have unused black sprites at the end of the image instead of missing sprites of the end of the video --- server/core/initializers/constants.ts | 2 +- .../job-queue/handlers/generate-storyboard.ts | 24 +++---------------- 2 files changed, 4 insertions(+), 22 deletions(-) diff --git a/server/core/initializers/constants.ts b/server/core/initializers/constants.ts index be84df974..6b5699130 100644 --- a/server/core/initializers/constants.ts +++ b/server/core/initializers/constants.ts @@ -941,7 +941,7 @@ export const ACTOR_IMAGES_SIZE: { [key in ActorImageType_Type]: { width: number, export const STORYBOARD = { SPRITE_MAX_SIZE: 192, - SPRITES_MAX_EDGE_COUNT: 10 + SPRITES_MAX_EDGE_COUNT: 11 } export const EMBED_SIZE = { diff --git a/server/core/lib/job-queue/handlers/generate-storyboard.ts b/server/core/lib/job-queue/handlers/generate-storyboard.ts index cfbfe24c4..4c0b8a985 100644 --- a/server/core/lib/job-queue/handlers/generate-storyboard.ts +++ b/server/core/lib/job-queue/handlers/generate-storyboard.ts @@ -73,7 +73,7 @@ async function processGenerateStoryboard (job: Job): Promise { logger.debug( 'Generating storyboard from video of %s to %s', video.uuid, destination, - { ...lTags, spritesCount, spriteDuration, videoDuration: video.duration, spriteHeight, spriteWidth } + { ...lTags, totalSprites, spritesCount, spriteDuration, videoDuration: video.duration, spriteHeight, spriteWidth } ) await ffmpeg.generateStoryboardFromVideo({ @@ -148,7 +148,7 @@ function buildSpritesMetadata (options: { // We can generate a single line so we don't need a prime number if (totalSprites <= STORYBOARD.SPRITES_MAX_EDGE_COUNT) return { spriteDuration, totalSprites } - return { spriteDuration, totalSprites: findNearestGridPrime(totalSprites, STORYBOARD.SPRITES_MAX_EDGE_COUNT) } + return { spriteDuration, totalSprites } } function findGridSize (options: { @@ -159,27 +159,9 @@ function findGridSize (options: { for (let i = 1; i <= maxEdgeCount; i++) { for (let j = i; j <= maxEdgeCount; j++) { - if (toFind === i * j) return { width: j, height: i } + if (toFind <= i * j) return { width: j, height: i } } } throw new Error(`Could not find grid size (to find: ${toFind}, max edge count: ${maxEdgeCount}`) } - -function findNearestGridPrime (value: number, maxMultiplier: number) { - for (let i = value; i--; i > 0) { - if (!isPrimeWithin(i, maxMultiplier)) return i - } - - throw new Error('Could not find prime number below ' + value) -} - -function isPrimeWithin (value: number, maxMultiplier: number) { - if (value < 2) return false - - for (let i = 2, end = Math.min(Math.sqrt(value), maxMultiplier); i <= end; i++) { - if (value % i === 0 && value / i <= maxMultiplier) return false - } - - return true -}