从相机帧创建视频

Create video from camera frames

我一直在玩 v4l2,我终于设法连接到笔记本电脑的摄像头并将其设置为流式传输。

目前我将帧保存为 1.jpg2.jpg

在基本层面上思考,我需要一个存储容器来存储这些 jpeg,然后视频播放器按顺序运行容器内容,然后我得到视频。

我假设视频格式将成为我的容器。

如何创建和写入一个?

最简单的方法是将 JPEG 图像保存为 MJPEG 格式的视频文件,这是一种由一系列 JPEG 图像组成的简单视频格式。

您可以使用不同的即用型编码器将一系列 JPEG 图像转换为 MJPEG(或任何其他格式)视频文件,例如 ffmpeg。使用 ffmpeg,您可以使用以下命令完成此操作:

ffmpeg -r 2 -i "%02d.jpg" -vcodec mjpeg test.avi

如果你想在 Go 中做到这一点,你可以使用非常简单的 github.com/icza/mjpeg 包(披露:我是作者)。

让我们看一个如何将 JPEG 文件 1.jpg2.jpg、...、10.jpg 转换为电影文件的示例:

checkErr := func(err error) {
    if err != nil {
        panic(err)
    }
}

// Video size: 200x100 pixels, FPS: 2
aw, err := mjpeg.New("test.avi", 200, 100, 2)
checkErr(err)

// Create a movie from images: 1.jpg, 2.jpg, ..., 10.jpg
for i := 1; i <= 10; i++ {
    data, err := ioutil.ReadFile(fmt.Sprintf("%d.jpg", i))
    checkErr(err)
    checkErr(aw.AddFrame(data))
}

checkErr(aw.Close())