视频的第一帧

4

我正在使用Golang作为后端和JavaScript作为前端来创建单页应用程序。

首先,我将.mp4视频文件上传到服务器并将其保存在服务器上。

是否有一种方法可以使用Golang获取此视频的第一帧?尽管在前端使用JavaScript也可以实现这一点,但我认为这不是解决此问题的正确方式。

我不知道如何使用Golang来实现它,并且我没有找到任何有用的库或内置函数来帮助我解决这个问题。

非常感谢您提供任何建议或推荐。


许多视频的第一帧都是黑色的空白图片(例如电影)。你应该选择更有意义的内容,比如从中间选取一帧。 - icza
你可以:a)解码视频流并选择任何你喜欢的帧,b)找到一个解码视频流并选择任何你喜欢的帧的库,或者c)使用外部程序来完成这项工作,我猜ffmpeg可以做到。 - mrd0ll4r
1个回答

12

如评论所建议的那样,使用ffmpeg将是最简单的方法。下面是从这个答案调整的例子:

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
}

Tim,你的回答帮了我很多。谢谢你,Tim。我正在扩展你的示例。我正在使用stdin和stdout来处理ffmpeg。stdin/stdout gist - Арсений Савин

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接