从相机帧创建视频

Posted

技术标签:

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

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

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

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

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

我如何创建和写入一个?

【问题讨论】:

完成了我的 MJPEG writer 库。请参阅编辑后的答案。 【参考方案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。泰

以上是关于从相机帧创建视频的主要内容,如果未能解决你的问题,请参考以下文章

iOS AVFoundation 如何使用 CMTime 转换每秒相机帧数以创建延时摄影?

从 Raspicam 捕获慢帧率视频

在后台捕获相机帧(Android)

如何从使用 Ionic 框架中的相机插件选择的视频文件 URI 创建 Blob?

从相机 Pyqt5 调整直播帧大小

如何从 rgb 和深度图像创建点云?