【问题标题】:Create video from camera frames从相机帧创建视频
【发布时间】:2017-04-04 13:24:55
【问题描述】:

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

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

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

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

我如何创建和写入一个?

【问题讨论】:

  • 完成了我的 MJPEG writer 库。请参阅编辑后的答案。

标签: video go video-encoding mjpeg


【解决方案1】:

最简单的方法是将您的 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())

【讨论】:

  • 嘿,我对您构建的软件包感到非常兴奋。我刚下班回家试了一下。我得到一个 avi 文件,但它无法播放。 VLC 报告以下错误。 [00007fe028009478] avi demux error: no key frame set for track 0如果要查看我的代码:link
  • @user3017869 只要您打算添加新的图像帧,就必须保持打开AviWriter,并在完成后关闭它。另外,你能用mplayer播放视频吗?因为我用mplayer测试过,没有报错(sudo apt install mplayer)。
  • @user3017869 添加了一个带有图像和结果视频的示例程序。请检查:example
  • Total brainfart,我在连续 for 循环中有 mjpeg.New 函数。最后我得到了一个单帧视频。您的解决方案从一开始就适用于 gr8。泰
猜你喜欢
  • 1970-01-01
  • 2012-05-25
  • 2022-01-15
  • 2021-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-23
  • 1970-01-01
相关资源
最近更新 更多