Crear una imagen desde un cuadro de video

Una de mis API acepta un archivo de video mp4 y luego sube el archivo a mi nube (AWS-S3). Leí el video del cuerpo, lo que significa que todo el video está en un formato de byte [], y luego lo canalizo directamente a mi almacenamiento. El problema es que esos videos son bastante grandes y cuando el usuario quiere descargar el video, necesita esperar mucho tiempo. Mostrar una pantalla en negro con una barra de progreso durante 30 segundos obviamente perjudica la experiencia del usuario. Necesito mostrarle al menos algún tipo de vista previa en forma de miniatura.

Ahora ese es mi problema. No encuentro ningún recurso sobre cómo elegir el primer fotograma de un video y luego representarlo en una imagen.

Un usuario de Stackoverflow hizo esta pregunta 2 años después:Primer cuadro de video usó ffmpeg para lograr esto, pero su contexto y problema eran diferentes. Necesitaba obtener el primer fotograma de un archivo estático, mientras que yo tengo el video en formato de byte simple de un cuerpo http. La respuesta a su pregunta, por lo tanto, no puede aplicarse a la mía.

No me malinterpretes, no te pido que lo hagas por mí para poder copiarlo y pegarlo en mi código base. Solo necesito algún tipo de pista.

Gracias por tu ayuda.

(EDITAR: Traté de conectarlo a ffmpeg:

    log.Print("Creating thumbnail..")
    width := 640
    height := 360
    var imageBuffer bytes.Buffer
    log.Print("Size of the video: ", len(videoData))

    cmd := exec.Command("ffmpeg", "-i", "pipe:0", "-vframes", "1", "-s", fmt.Sprintf("%dx%d", width, height), "-f", "singlejpeg", "-")
    cmd.Stdout = &imageBuffer

    stdinPipe, pipeError := cmd.StdinPipe()
    _ = pipeError
    defer  stdinPipe.Close()

    log.Print("write to pipe..")
    err := cmd.Start()

    n, writingErr := stdinPipe.Write(videoData)

        if writingErr != nil {
            log.Panic("WRITING ERROR")

        }
    log.Print("Bytes written: ", n)


    log.Print("pipe has been written to")
    cmd.Wait()
    log.Print("Waited..")

    if err != nil {
        ErrorLogger.ReportErrorAndWait(ErrorLogger.ErrorMessage{Error: err, Message: "Unable to create thumbnail.", Priority: ErrorLogger.HIGH_PRIORITY, Category: "upload"})
        log.Panic("ERROR")
        go UploadThumbnail(videoData, fileNameWithoutType)
    }

    imageBytes := imageBuffer.Bytes()
    log.Print("Size of the image: ", len(imageBytes))

Pero el resultado fue una imagen vacía.

2018/04/14 12:41:50 Tamaño de la imagen: 0

Respuestas a la pregunta(0)

Su respuesta a la pregunta