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