diff options
| author | pablu <me@pablu.de> | 2026-08-06 10:58:29 +0200 |
|---|---|---|
| committer | pablu <me@pablu.de> | 2026-08-06 11:01:39 +0200 |
| commit | af6c7b36997e87b93e24fd055e9c0b640f8abaef (patch) | |
| tree | 318d2d01cbb742d24d8d2a53034b3b3f29efccc3 /generator.go | |
| parent | 13de03cd1cc659f062f159382a3e9c17c51a5b74 (diff) | |
feat: add https safe file handling
Diffstat (limited to 'generator.go')
| -rw-r--r-- | generator.go | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/generator.go b/generator.go index 5710a2c..2bb293b 100644 --- a/generator.go +++ b/generator.go @@ -61,11 +61,11 @@ func (opts *Options) GetThumbnail(path string) ([][]byte, int, error) { return nil, 0, err } - var interval int + var interval int if opts.UseSegments { interval = int(length / float64(opts.Segments)) } else { - interval = opts.Interval + interval = opts.Interval } return GetThumbnailUnderlying(path, opts.MaxThumbnails, filters, length, interval, opts.EnableFilter, opts.Format, opts.Scale) @@ -148,9 +148,23 @@ func GetVideoLength(path string) (float64, error) { return strconv.ParseFloat(strings.ReplaceAll(buf.String(), "\n", ""), 64) } +func escapeFilterValue(value string) string { + return strings.NewReplacer( + "\\", "\\\\", + "'", "\\'", + ":", "\\:", + ",", "\\,", + ";", "\\;", + "[", "\\[", + "]", "\\]", + ).Replace(value) +} + func GetFilter(path string) ([]TimeFilter, error) { buf := bytes.NewBuffer(nil) - cmd := exec.Command("ffprobe", "-f", "lavfi", "-i", fmt.Sprintf("movie=%s,blackdetect[out0]", path), "-show_entries", "tags=lavfi.black_start,lavfi.black_end", "-of", "default=nw=1", "-v", "quiet") + filter := fmt.Sprintf("movie=filename='%s',blackdetect[out0]", escapeFilterValue(path)) + + cmd := exec.Command("ffprobe", "-f", "lavfi", "-i", filter, "-show_entries", "tags=lavfi.black_start,lavfi.black_end", "-of", "default=nw=1", "-v", "quiet") cmd.Stdout = buf err := cmd.Run() // TODO: Replace with strings.Builder |
