stash/pkg/manager/task_generate_preview.go

73 lines
2.1 KiB
Go
Raw Normal View History

2019-02-10 05:30:54 +00:00
package manager
import (
"sync"
2019-02-14 23:42:52 +00:00
"github.com/stashapp/stash/pkg/ffmpeg"
"github.com/stashapp/stash/pkg/logger"
"github.com/stashapp/stash/pkg/models"
"github.com/stashapp/stash/pkg/utils"
2019-02-10 05:30:54 +00:00
)
type GeneratePreviewTask struct {
Scene models.Scene
ImagePreview bool
Options models.GeneratePreviewOptionsInput
Overwrite bool
2019-02-10 05:30:54 +00:00
}
func (t *GeneratePreviewTask) Start(wg *sync.WaitGroup) {
2019-02-10 20:15:36 +00:00
defer wg.Done()
2019-02-10 05:30:54 +00:00
videoFilename := t.videoFilename()
imageFilename := t.imageFilename()
videoExists := t.doesVideoPreviewExist(t.Scene.Checksum)
if !t.Overwrite && ((!t.ImagePreview || t.doesImagePreviewExist(t.Scene.Checksum)) && videoExists) {
2019-02-10 05:30:54 +00:00
return
}
videoFile, err := ffmpeg.NewVideoFile(instance.FFProbePath, t.Scene.Path)
2019-02-10 05:30:54 +00:00
if err != nil {
logger.Errorf("error reading video file: %s", err.Error())
return
}
generator, err := NewPreviewGenerator(*videoFile, videoFilename, imageFilename, instance.Paths.Generated.Screenshots, true, t.ImagePreview, t.Options.PreviewPreset.String())
2019-02-10 05:30:54 +00:00
if err != nil {
logger.Errorf("error creating preview generator: %s", err.Error())
return
}
generator.Overwrite = t.Overwrite
2019-02-10 05:30:54 +00:00
// set the preview generation configuration from the global config
generator.Info.ChunkCount = *t.Options.PreviewSegments
generator.Info.ChunkDuration = *t.Options.PreviewSegmentDuration
generator.Info.ExcludeStart = *t.Options.PreviewExcludeStart
generator.Info.ExcludeEnd = *t.Options.PreviewExcludeEnd
2019-02-10 05:30:54 +00:00
if err := generator.Generate(); err != nil {
logger.Errorf("error generating preview: %s", err.Error())
return
}
}
func (t *GeneratePreviewTask) doesVideoPreviewExist(sceneChecksum string) bool {
2019-02-10 20:15:36 +00:00
videoExists, _ := utils.FileExists(instance.Paths.Scene.GetStreamPreviewPath(sceneChecksum))
return videoExists
}
func (t *GeneratePreviewTask) doesImagePreviewExist(sceneChecksum string) bool {
2019-02-10 20:15:36 +00:00
imageExists, _ := utils.FileExists(instance.Paths.Scene.GetStreamPreviewImagePath(sceneChecksum))
return imageExists
2019-02-10 05:30:54 +00:00
}
func (t *GeneratePreviewTask) videoFilename() string {
return t.Scene.Checksum + ".mp4"
}
func (t *GeneratePreviewTask) imageFilename() string {
return t.Scene.Checksum + ".webp"
}