从相机帧创建视频

use*_*869 4 video mjpeg go video-encoding

我一直在尝试 v4l2,最终成功连接到笔记本电脑的摄像头并将其设置为流式传输。

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

从基本层面考虑,我需要一个存储这些 jpeg 的容器,然后视频播放器按顺序运行容器内容并获得视频。

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

我如何创建并写入一个?

icz*_*cza 5

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

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

ffmpeg -r 2 -i "%02d.jpg" -vcodec mjpeg test.avi
Run Code Online (Sandbox Code Playgroud)

如果你想在 Go 中做到这一点,你可以使用 dead-simplegithub.com/icza/mjpeg包(披露:我是作者)。

让我们看一个如何将 JPEG 文件1.jpg, 2.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())
Run Code Online (Sandbox Code Playgroud)