go/img/img.go

76 lines
1.4 KiB
Go
Raw Normal View History

2024-11-10 11:57:46 -05:00
package img
import (
2025-05-05 12:14:53 -04:00
"fmt"
2024-11-10 11:57:46 -05:00
"image"
"image/draw"
"image/png"
"os"
2025-05-05 12:14:53 -04:00
"os/exec"
2024-11-10 11:57:46 -05:00
"github.com/anthonynsimon/bild/adjust"
)
const (
2025-05-05 12:14:53 -04:00
StyleDark = -0.70
ffmpegBin = "/usr/bin/ffmpeg"
2024-11-10 11:57:46 -05:00
)
2025-05-05 12:14:53 -04:00
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
}
2024-11-10 11:57:46 -05:00
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
}