github.com/bakape/thumbnailer

из моих API принимает видео файл mp4, а затем загружает файл в мое облако (AWS-S3). Я читаю видео из тела, что означает, что все видео находится в необработанном байтовом формате [], а затем напрямую передаю его в мое хранилище. Проблема в том, что эти видео достаточно большие, и когда пользователь хочет скачать видео, ему нужно ждать довольно долго. Отображение черного экрана с индикатором выполнения в течение 30 секунд, очевидно, ухудшает восприятие пользователем. Мне нужно показать ему хоть какой-то превью в виде эскиза.

Теперь это моя проблема. Я не нахожу ресурсов о том, как выбрать первый кадр видео, а затем отобразить его как изображение.

Пользователь из Stackoverflow задал этот вопрос 2 года назад:Первый кадр видео использовал ffmpeg для достижения этой цели, но его контекст и проблема были другими. Ему нужно было получить первый кадр из статического файла, а у меня есть видео в формате обычного байта [] из тела http. Ответ на его вопрос, следовательно, не может быть применен к моему.

Не поймите меня неправильно, я не прошу вас сделать это для меня, чтобы я мог скопировать и вставить это в свою базу кода. Мне просто нужна какая-то подсказка.

Спасибо за помощь.

(РЕДАКТИРОВАТЬ: Я попытался передать его в 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))

Но на выходе было пустое изображение.

2018/04/14 12:41:50 Размер изображения: 0

Ответы на вопрос(0)

Ваш ответ на вопрос