我(像许多人一样)试图从与树莓派相连的相机中获取一系列连续的静止图像。出于所有常见原因,我想在Java中执行此操作,并且正在使用运行时exec命令将raspivid的输出传递到以下ffmpeg命令,然后通过stdout收集结果---注意xxx.h264是测试文件相机产生的图像,由于没有容器而无法播放,但是我得到的图像好一半。
ffmpeg -i xxx.h264 -vcodec rawvideo -r 2 -pix_fmt yuv420p -f nut -
我有一些代码显示框架,但是它们在显示区域中从左到右“行进”,并且图像顶部似乎有越来越多的垃圾。我已经通过运行相同的命令并将其重定向到文件中,然后使用vi / xxd来查看它输出的字节,然后发现存在标头材料(“ nut / multimedia container ...”)。
我猜想我的ffmpeg命令插入了更多的元数据,如此处所述,在处理原始yuv420p数据时无法删除:https://en.wikipedia.org/wiki/YUV#Y%E2%80%B2UV420sp_%28NV21%29_to_RGB_conversion_%28Android%29
在我的生命中,无论如何我都找不到任何可读格式的螺母文档,看来这不是我应该寻找的。关于如何识别字节流中的帧边界的任何指针?
答案 0 :(得分:0)
-f nut
代表NUT容器。看起来您不需要任何封装,因此请使用-f rawvideo
。另外,Wiki链接代码用于nv21
,这是4:2:0数据的不同布局。 yuv420p
是所有Y样本,然后是所有U样本,然后是所有V样本。 U / V是半角和半高。如果Y的宽度或高度为奇数,则对应的U / V尺寸为int(Y / 2)+ 1