从相机帧创建视频
Posted
技术标签:
【中文标题】从相机帧创建视频【英文标题】:Create video from camera frames 【发布时间】:2017-04-04 13:24:55 【问题描述】:我一直在玩 v4l2,终于设法连接到笔记本电脑的摄像头并将其设置为流式传输。
目前我将帧保存为1.jpg
、2.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.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())
【讨论】:
嘿,我对您构建的软件包感到非常兴奋。我刚下班回家试了一下。我得到一个 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 转换每秒相机帧数以创建延时摄影?