我正在编写一个应用程序(在 ARM Ubuntu 上运行),该应用程序需要能够对来自网络摄像头的视频流进行图像处理。获取数据的最简单方法是通过进程上的输出流,因此我计划托管一个子进程,运行命令并使用输出。我目前的计划是使用 FFMPEG,但我可以使用任何适用于 ARM 的命令行工具。我的问题实际上分为两部分:
- 我需要从命令行使用什么 FFMPEG(或其他实用程序,如果有更好的)命令来从网络摄像头获取像素数据流?
- 输出将采用什么格式(最好只有 RGB 数据,没有编码或标题)?我需要在我的应用程序中解析它,并且需要知道编码格式。
任何信息,将不胜感激!
答案1
使用 FFmpeg 和video4linux2
,您可以获取几乎任何网络摄像头输入。确保使用最新版本ffmpeg
的下载页面或自己编译。您可以使用以下方法检查相机帧大小和帧速率:
v4l2-ctl --list-formats-ext
例如,如果你发现网络摄像头提供的帧速率和图片大小:
ffmpeg -f video4linux2 -r 25 -s 640x480 -i /dev/video0 \
-c:v rawvideo -f rawvideo -pix_fmt yuv420p -
这将从相机以 640×480 像素的速度捕获 25fps 的视频,/dev/video0
并将使用 YUV 4:2:0 平面像素格式编码的原始 YUV 帧输出到标准输出。rawvideo
编码器和格式会处理这些。不会有标题。
您可以在此处更改:
设置不同的帧速率或尺寸。
这里,
-
最后将数据发送到标准输出,但如果您愿意,也可以选择一个文件。要查看其他可用的像素格式,请运行
ffmpeg -pix_fmts
。它们的字节顺序解释如下fourcc.org。如果您确实想要 RGB 数据(尽管我怀疑这不是您的相机默认输出),您可以使用-pix_fmt rgb24
,例如。
答案2
一定要检查 VLC 的命令行选项。我不太熟悉它的输出流,但我似乎读到过它可以完成你想做的事情。