package local import ( "bytes" "fmt" ffmpeg "github.com/u2takey/ffmpeg-go" "io/fs" "os" "path/filepath" ) func isSymlinkDir(f fs.FileInfo, path string) bool { if f.Mode()&os.ModeSymlink == os.ModeSymlink { dst, err := os.Readlink(filepath.Join(path, f.Name())) if err != nil { return false } if !filepath.IsAbs(dst) { dst = filepath.Join(path, dst) } stat, err := os.Stat(dst) if err != nil { return false } return stat.IsDir() } return false } func GetSnapshot(videoPath string, frameNum int) (imgData *bytes.Buffer, err error) { srcBuf := bytes.NewBuffer(nil) err = ffmpeg.Input(videoPath).Filter("select", ffmpeg.Args{fmt.Sprintf("gte(n,%d)", frameNum)}). Output("pipe:", ffmpeg.KwArgs{"vframes": 1, "format": "image2", "vcodec": "mjpeg"}). WithOutput(srcBuf, os.Stdout). Run() if err != nil { return nil, err } return srcBuf, nil }