I'm creating a single page application with Golang on the backend and javascript on the frontend. I´d like to find a way how to get the first frame of a video using Golang.
First, I upload a .mp4 video file to the server. It is saved on the server.
Is there a way to get the first frame of this video, using Golang? It should be possible to do it using Javascript on frontend, but I don't feel like it is the right way to solve this issue.
I have no idea how to implement it using Golang, and I haven't found any useful libraries, not even built-in functions that could help me to solve this.
Every piece of advice or any recommendations will be much appreciated.
You can set preload='auto' on the video element to load the first frame of the video automatically.
A poster frame is the image that is displayed in the SproutVideo player. It appears as a fixed image on the screen until the video or live stream begins.
As suggested in the comments, using ffmpeg would be the easiest approach. Below is an example adapted from this answer:
package main
import (
"bytes"
"fmt"
"os/exec"
)
func main() {
filename := "test.mp4"
width := 640
height := 360
cmd := exec.Command("ffmpeg", "-i", filename, "-vframes", "1", "-s", fmt.Sprintf("%dx%d", width, height), "-f", "singlejpeg", "-")
var buffer bytes.Buffer
cmd.Stdout = &buffer
if cmd.Run() != nil {
panic("could not generate frame")
}
// Do something with buffer, which contains a JPEG image
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With