mirror of
https://github.com/AlistGo/alist.git
synced 2025-04-22 21:04:07 +08:00
perf(local): avoid duplicate parsing of VideoThumbPos (#7812)
* feat(local): support percent for video thumbnail The percentage determines the point in the video (as a percentage of the total duration) at which the thumbnail will be generated. * feat(local): support both time and percent for video thumbnail * refactor(local): avoid duplicate parsing of VideoThumbPos
This commit is contained in:
parent
b449312da8
commit
8f89c55aca
@ -35,6 +35,10 @@ type Local struct {
|
||||
// zero means no limit
|
||||
thumbConcurrency int
|
||||
thumbTokenBucket TokenBucket
|
||||
|
||||
// video thumb position
|
||||
videoThumbPos float64
|
||||
videoThumbPosIsPercentage bool
|
||||
}
|
||||
|
||||
func (d *Local) Config() driver.Config {
|
||||
@ -92,6 +96,8 @@ func (d *Local) Init(ctx context.Context) error {
|
||||
if val < 0 || val > 100 {
|
||||
return fmt.Errorf("invalid video_thumb_pos value: %s, the precentage must be a number between 0 and 100", d.VideoThumbPos)
|
||||
}
|
||||
d.videoThumbPosIsPercentage = true
|
||||
d.videoThumbPos = val / 100
|
||||
} else {
|
||||
val, err := strconv.ParseFloat(d.VideoThumbPos, 64)
|
||||
if err != nil {
|
||||
@ -100,6 +106,8 @@ func (d *Local) Init(ctx context.Context) error {
|
||||
if val < 0 {
|
||||
return fmt.Errorf("invalid video_thumb_pos value: %s, the time must be a positive number", d.VideoThumbPos)
|
||||
}
|
||||
d.videoThumbPosIsPercentage = false
|
||||
d.videoThumbPos = val
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
@ -61,22 +61,14 @@ func (d *Local) GetSnapshot(videoPath string) (imgData *bytes.Buffer, err error)
|
||||
}
|
||||
|
||||
var ss string
|
||||
if strings.HasSuffix(d.VideoThumbPos, "%") {
|
||||
percentage, err := strconv.ParseFloat(strings.TrimSuffix(d.VideoThumbPos, "%"), 64)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
ss = fmt.Sprintf("%f", totalDuration*percentage/100)
|
||||
if d.videoThumbPosIsPercentage {
|
||||
ss = fmt.Sprintf("%f", totalDuration*d.videoThumbPos)
|
||||
} else {
|
||||
val, err := strconv.ParseFloat(d.VideoThumbPos, 64)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
// If the value is greater than the total duration, use the total duration
|
||||
if val > totalDuration {
|
||||
if d.videoThumbPos > totalDuration {
|
||||
ss = fmt.Sprintf("%f", totalDuration)
|
||||
} else {
|
||||
ss = d.VideoThumbPos
|
||||
ss = fmt.Sprintf("%f", d.videoThumbPos)
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user