将元数据嵌入到H.264编码文件中

4
我正在开发一个应用程序,该程序针对来自摄像头的预览帧生成某些元数据。我可以看到这些元数据被正确生成,这一点没有问题。
然而,我必须将这些元数据嵌入到感兴趣的帧中(这些帧由本地算法处理以生成这些元数据)。我正在使用ffmpeg和x264将帧编码为H.264。我已经检查了x264.h和一些文档,但未能找到所需内容。
我的问题是:是否有任何未使用的H.264语法部分,我可以将元数据嵌入到编码后的帧中?
希望我表述清楚了。谢谢。

1
看看这个http://atomicparsley.sourceforge.net/...或者这个http://www.brooksandrus.com/blog/2007/08/29/a-quick-look-at-h264-metadata/但我不知道你是否能在那里找到答案,因为我只熟悉在流媒体中提供元数据(使用live555或任何RTSP)。 - Shark
新版本的ffmpeg具有以下新特性的第一点:“比特流过滤器可用于编辑H.264、HEVC和MPEG-2流中的元数据” http://ffmpeg.org/index.html#pr4.0 - wcochran
1个回答

6
大多数视频的基本流都有"用户数据(user data)"的规定。在H.264中,这是SEI nal unit的一部分。您可以在要关联的每个帧之前添加一个SEI nal unit。我认为x264不支持从外部添加用户数据。
两种选择:
1. 修改x264 / ffmpeg以在任何所需位置添加SEI消息,以您喜欢的形式输入。
2. 创建您的流,创建您的元数据。现在编写一个小程序单独读取您的元数据并解析文件,在您想要的帧之前推送一个SEI NAL unit。
要了解SEI语法,您应该能够使用谷歌并获得它。最好的地方是查看H.264标准。更简单的方法是查看x264中的代码。它会在开头插入一个用户数据(编码参数)。

非常感谢,我会马上查看。你再次拯救了我,av501 :) - kerim yucel
欢迎。第二种方法仅适用于基本流。忘了提到这一点。在容器中,您还必须注意容器本身。 - av501
@user1767754,不确定您想要什么。大多数时间码信息都是流或封装容器中可用的标准信息。因此,现在我猜这将是重复劳动。您需要更具体地说明要存储什么。您可以存储任何内容,但由于它是用户数据,除非您控制解码器并且了解代码,否则没有人能够理解它! - av501

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接