mirror of
https://github.com/stashapp/stash.git
synced 2026-04-23 15:31:21 +02:00
configurable minimum number of sprites
This commit is contained in:
parent
f174989d18
commit
8171b27095
7 changed files with 29 additions and 4 deletions
|
|
@ -187,6 +187,8 @@ input ConfigGeneralInput {
|
|||
|
||||
"Time between two different scrubber sprites"
|
||||
spriteInterval: Int
|
||||
"Minimum number of sprites to be generated"
|
||||
minimumSprites: Int
|
||||
}
|
||||
|
||||
type ConfigGeneralResult {
|
||||
|
|
@ -292,6 +294,8 @@ type ConfigGeneralResult {
|
|||
logFileMaxSize: Int!
|
||||
"Time between two different scrubber sprites"
|
||||
spriteInterval: Int!
|
||||
"Minimum number of sprites to be generated"
|
||||
minimumSprites: Int!
|
||||
"Array of video file extensions"
|
||||
videoExtensions: [String!]!
|
||||
"Array of image file extensions"
|
||||
|
|
|
|||
|
|
@ -288,6 +288,7 @@ func (r *mutationResolver) ConfigureGeneral(ctx context.Context, input ConfigGen
|
|||
c.SetString(config.PreviewPreset, input.PreviewPreset.String())
|
||||
}
|
||||
r.setConfigInt(config.SpriteInterval, input.SpriteInterval)
|
||||
r.setConfigInt(config.MinimumSprites, input.MinimumSprites)
|
||||
|
||||
r.setConfigBool(config.TranscodeHardwareAcceleration, input.TranscodeHardwareAcceleration)
|
||||
if input.MaxTranscodeSize != nil {
|
||||
|
|
|
|||
|
|
@ -97,6 +97,7 @@ func makeConfigGeneralResult() *ConfigGeneralResult {
|
|||
VideoFileNamingAlgorithm: config.GetVideoFileNamingAlgorithm(),
|
||||
ParallelTasks: config.GetParallelTasks(),
|
||||
SpriteInterval: config.GetSpriteInterval(),
|
||||
MinimumSprites: config.GetMinimumSprites(),
|
||||
PreviewAudio: config.GetPreviewAudio(),
|
||||
PreviewSegments: config.GetPreviewSegments(),
|
||||
PreviewSegmentDuration: config.GetPreviewSegmentDuration(),
|
||||
|
|
|
|||
|
|
@ -86,6 +86,9 @@ const (
|
|||
SpriteInterval = "sprite_interval"
|
||||
SpriteIntervalDefault = 0
|
||||
|
||||
MinimumSprites = "minimum_sprites"
|
||||
MinimumSpritesDefault = 10
|
||||
|
||||
PreviewPreset = "preview_preset"
|
||||
TranscodeHardwareAcceleration = "ffmpeg.hardware_acceleration"
|
||||
|
||||
|
|
@ -982,6 +985,11 @@ func (i *Config) GetSpriteInterval() int {
|
|||
return i.getInt(SpriteInterval)
|
||||
}
|
||||
|
||||
// GetMinimumSprites return the minimum number of sprites that have to be generated
|
||||
func (i *Config) GetMinimumSprites() int {
|
||||
return i.getInt(MinimumSprites)
|
||||
}
|
||||
|
||||
func (i *Config) GetPreviewAudio() bool {
|
||||
return i.getBool(PreviewAudio)
|
||||
}
|
||||
|
|
@ -1862,6 +1870,7 @@ func (i *Config) setDefaultValues() {
|
|||
i.setDefault(SoundOnPreview, false)
|
||||
|
||||
i.setDefault(SpriteInterval, SpriteIntervalDefault)
|
||||
i.setDefault(MinimumSprites, MinimumSpritesDefault)
|
||||
|
||||
i.setDefault(ThemeColor, DefaultThemeColor)
|
||||
|
||||
|
|
|
|||
|
|
@ -18,7 +18,6 @@ import (
|
|||
|
||||
const (
|
||||
DefaultSpriteInterval = 30
|
||||
MinimalSpriteCount = 10
|
||||
)
|
||||
|
||||
type SpriteGenerator struct {
|
||||
|
|
@ -47,9 +46,12 @@ func NewSpriteGenerator(videoFile ffmpeg.VideoFile, videoChecksum string, imageO
|
|||
if config.GetSpriteInterval() != 0 {
|
||||
spriteInterval = config.GetSpriteInterval()
|
||||
}
|
||||
|
||||
minimumSpriteCount := config.GetMinimumSprites()
|
||||
spriteCount := int64(math.Ceil(videoFile.VideoStreamDuration / float64(spriteInterval)))
|
||||
|
||||
// For files with small duration / low frame count try to seek using frame number intead of seconds
|
||||
if (spriteCount == 0) || (videoFile.VideoStreamDuration < float64(spriteInterval*MinimalSpriteCount)) || (0 < videoFile.FrameCount && videoFile.FrameCount <= spriteCount) { // some files can have FrameCount == 0
|
||||
if (spriteCount == 0) || (videoFile.VideoStreamDuration < float64(spriteInterval*minimumSpriteCount)) || (0 < videoFile.FrameCount && videoFile.FrameCount <= spriteCount) { // some files can have FrameCount == 0
|
||||
if videoFile.VideoStreamDuration <= 0 {
|
||||
s := fmt.Sprintf("video %s: duration(%.3f)/frame count(%d) invalid, skipping sprite creation", videoFile.Path, videoFile.VideoStreamDuration, videoFile.FrameCount)
|
||||
return nil, errors.New(s)
|
||||
|
|
@ -71,10 +73,10 @@ func NewSpriteGenerator(videoFile ffmpeg.VideoFile, videoChecksum string, imageO
|
|||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if spriteCount > int64(MinimalSpriteCount) {
|
||||
if spriteCount > int64(minimumSpriteCount) {
|
||||
generator.ChunkCount = int(spriteCount)
|
||||
} else {
|
||||
generator.ChunkCount = MinimalSpriteCount
|
||||
generator.ChunkCount = minimumSpriteCount
|
||||
}
|
||||
if err := generator.configure(); err != nil {
|
||||
return nil, err
|
||||
|
|
|
|||
|
|
@ -40,6 +40,7 @@ fragment ConfigGeneralData on ConfigGeneralResult {
|
|||
logAccess
|
||||
logFileMaxSize
|
||||
spriteInterval
|
||||
minimumSprites
|
||||
createGalleriesFromFolders
|
||||
galleryCoverRegex
|
||||
videoExtensions
|
||||
|
|
|
|||
|
|
@ -435,6 +435,13 @@ export const SettingsConfigurationPanel: React.FC = () => {
|
|||
value={general.spriteInterval ?? 0}
|
||||
onChange={(v) => saveGeneral({ spriteInterval: v })}
|
||||
/>
|
||||
<NumberSetting
|
||||
id="scrubber-sprites-minimum"
|
||||
headingID=/*"config.general.include_audio_head"todo*/"Minimum sprites"
|
||||
subHeadingID=/*"config.general.include_audio_desc"*/"todo: Minimum number of sprites to be generated"
|
||||
value={general.minimumSprites ?? 10}
|
||||
onChange={(v) => saveGeneral({ minimumSprites: v })}
|
||||
/>
|
||||
</SettingSection>
|
||||
|
||||
<SettingSection headingID="config.general.heatmap_generation">
|
||||
|
|
|
|||
Loading…
Reference in a new issue