Raspberry Pi 和视频捕获:1080p 难题

Raspberry Pi 和视频捕获:1080p 难题

Raspberry Pi 和视频捕获:1080p 难题

最近,我接到了几个涉及捕获视频的项目。一个是 3D 成像项目,在这个项目中,我们需要在一个平台上使用 5 个 1080p 视频源来捕获某个项目一分钟的旋转情况,这为我们提供了数量惊人的数据来训练某个图像识别软件。

另一个项目非常有趣,由于我们的实验室将迎来特约嘉宾,我尝试找到让社区参与我们将构建的项目的办法。为什么不将整个实验室实时流式传输到我们的 YouTube 频道,以便人们可看到我们在做什么并与我们互动?

这两个项目都有趣,由于我们手头有一堆 Raspberry Pi 3,我决定使用一个并看看能否捕获一堆视频源或将此设备转换为高效流式传输设备,以便我不必征用视频工作人员功能更强大的笔记本电脑。如果我能让此小的单板计算机执行这些任务,那么将真正空出来许多功能强大的计算机,加上这是一次非常酷的演示,我怀疑此电路板是否真的有圆满完成任务的马力。

一开始,我只是尽力搜索与视频捕获相关的内容,之后决定尝试使用我手头的 USB 网络摄像头 Logitech C920 并尝试实施我们在 Fridge Defender 项目中使用的 NoIR Pi 照相机。虽然 Raspberry Pi 附带捕获视频的内置软件(如 Streamer),但我选择不走寻常路使用 FFmpeg,FFmpeg 具有广泛的支持社区和许多针对不同编码器的选项,为我提供了灵活性和大量入门示例。

我的初步结果并不理想。使用 ffmpeg 将来自 USB 网络摄像头的视频捕获到 AVI 文件的结果糟糕 - Raspberry Pi 将命中 50% 的 CPU 用量并且无法以理想的每秒 30 帧的速率捕获 1080p 视频。当我检查结果时,得出每秒约 6.6 帧,这导致在流式传输我们的实验或执行 3D 对象创建时视频断断续续并且不可用。我缩减至 720p,之后看见改进到每秒 14 帧,但此速率还是无意义。通过改为 WVGA 格式(为 854x480),我终于得到了所期待的每秒 30 帧的一致速率,但视频质量堪忧,对于图像识别,像素越高越好。我对我的小役马 Pi 失望,但我没打算就此彻底放弃。

Raspberry Pi 和视频捕获:1080p 难题

 

这时,我可选择更换为动力更强或潜得更深的其他计算机。我选择了“潜得更深”,因为我喜欢挑战,我认为 Pi 能够做得更多。我开始针对要测试的音频和视频使用不同的编码译码器重新编译 ffmpeg。由于编译代码可能需要大量工作,因此一般不赞成在 Raspberry Pi 上编译 ffmpeg,但根据我的经验,如果您考虑 4 内核处理器的 Raspberry Pi 3,在本地利用多个选项编译 ffmpeg 肯定是合理的。如果您选择在本地编译,不需要数小时,而且还有足够的时间喝喝咖啡、聊聊天。确保使用“make -j4”命令充分利用 Pi 的 4 个内核,否则您的等待时间将很长。

在咖啡因和好音乐的刺激下,最终我的“灵机一现”时刻在星期四晚上姗姗来迟。我在 Pi 上遇到的最大的问题是能力有限,无法专用于尝试将我的传入视频流转码为我认为更有用的格式。照相机输出的是原始视频源,Pi 之后会将其转换为更常见的 mpeg4。此转码使处理器的能力以及存储和内存的带宽受压。C920 能够解决原始输入的问题。C920 具有现成的专用编码器,能够输出 h.264 编码流。H.264 是另一种常见的视频格式,虽然它更接近我想要的质量,但转码将降低我的每秒视频帧速率。

在了解照相机将为我提供 h.264 而无额外的工作后,我还发现对于实验流,无需我先操作,YouTube 能够接受 h.264 流。我仍需稍微修改一下音频,但不会使 Pi 受压。在我能够传递 h,264 流后,我期待在 YouTube 上实现每秒 30 帧的速率以及 1080p 分辨率,我当时欣喜若狂。

Raspberry Pi 和视频捕获:1080p 难题

 

下面显示的是我在 ffmpeg 中设置的最终设置命令,目的是为您自己的冒险提供一个起点。

ffmpeg -ar 44100 -ac 2 -f alsa -i hw:1,0 -f v4l2 -codec:v h264 -framerate 30 -video_size 1920x1080 -itsoffset 0.5 -i /dev/video0 -copyinkf -codec:v copy -codec:a aac -ab 128k -g 10 -f flv rtmp://a.rtmp.youtube.com/live2/(此处是您的流密钥)

上述命令为我提供了一个从我的 USB 网络摄像头到 YouTube 的 1080p 30fps 流(包括音频)。仍要许多待完善的地方,因为 YouTube 仍抱怨我的帧速率不正确,但结果无可争辩,它确实成功了。

现在我可高效捕获 1080p 30fps 视频,我认为我至少可获得我们的 3D 成像项目所需的源。h.264 视频在捕获后可在 Pi 上使用 MP4Box 转换为 MPEG4,这为我们的分析软件提供了它可细分为独立帧以便分析的内容。

这里您已经有了,Raspberry Pi 3 具有足够的马力将高清视频流式传输到 YouTube – 只需确保您要使用的照相机将为您提供已编码的流。Pi 没有实时转码 1080p 视频所需的全部功能,但只要选择正确和稍微挖掘,它仍可完成许多工作。我期待看到您对这些洞察发表看法,并且希望您不要错过我们的任何实验流,我们将与特邀嘉宾一起创建我们的下一批出色项目。