package img import ( "fmt" "image" "image/draw" "image/png" "os" "os/exec" "github.com/anthonynsimon/bild/adjust" ) const ( StyleDark = -0.70 ffmpegBin = "/usr/bin/ffmpeg" ) var ErrorFFMPEGBinaryNotFound = fmt.Errorf("ffmpeg binary not found: %s", ffmpegBin) func CreateThumbnail(videoFile, thumbFilename string) (err error) { // ffmpeg -i videoFile -ss 00:00:01.000 -vframes 1 output.png cmd := exec.Command(ffmpegBin, "-i", videoFile, "-ss", "00:05:00.000", "-vframes", "1", thumbFilename) _, err = cmd.Output() if err != nil { return ErrorFFMPEGBinaryNotFound } return nil } func Overlay(inputFile, overlayFile string, style float64) (err error) { thumb, err := os.Open(inputFile) if err != nil { return err } overlay, err := os.Open(overlayFile) if err != nil { return err } img0, err := png.Decode(thumb) if err != nil { return err } defer thumb.Close() img1, err := png.Decode(overlay) if err != nil { return err } defer overlay.Close() b0 := img0.Bounds() b1 := img1.Bounds() img0 = adjust.Brightness(img0, style) offset := image.Pt(b0.Dx()/2-b1.Dx()/2, b0.Dy()/2-b1.Dy()/2) m := image.NewRGBA(b0) draw.Draw(m, b0, img0, image.Point{}, draw.Src) draw.Draw(m, img1.Bounds().Add(offset), img1, image.Point{}, draw.Over) imgw, err := os.Create(inputFile) if err != nil { return err } png.Encode(imgw, m) defer imgw.Close() return nil }