C AVFrame不推荐的属性是否要恢复?

C AVFrame不推荐的属性是否要恢复?,c,ffmpeg,C,Ffmpeg,我想打印出视频帧的一些属性:我查看了AVFrame struct,但只发现以下令人失望的地方: attribute_deprecated short * dct_coeff attribute_deprecated uint32_t * mb_type 在我看来,我感兴趣的一切都已经过时了。顺便说一句,我没有找到 int16_t(*[2] motion_val )[2] 属性在我捕获的实际帧中。我的问题是:我怎样才能访问那些属性,比如dct系数、运动向量或帧的mb类型?有

我想打印出视频帧的一些属性:我查看了AVFrame struct,但只发现以下令人失望的地方:

attribute_deprecated short *    dct_coeff
attribute_deprecated uint32_t *     mb_type
在我看来,我感兴趣的一切都已经过时了。顺便说一句,我没有找到

int16_t(*[2]    motion_val )[2]
属性在我捕获的实际帧中。我的问题是:我怎样才能访问那些属性,比如dct系数、运动向量或帧的mb类型?

有关运动向量的信息,请参见
(frame,
。另外两个没有替代品。文档说明它们是特定于mpeg的,并且使用内部实现细节,这就是为什么没有提供替换

(不要忘记设置
avctx->
&
,否则不会导出。)


对于没有替代品的两个,我理解如果您正在编写流分析器,您可能需要这种类型的信息,但FFmpeg目前确实没有提供流分析器级别的API。如果有更通用的API,它们显然可以作为一个单独的数据类型添加。如果您想这样做,您可能应该成为一名FFmpeg开发人员,并在一个更广泛的API上工作,该API不是特定于MPEG的(例如,不对mb_类型使用内部宏),甚至可能为其他编解码器实现它。在任何其他情况下,我真的不明白你为什么想要这些信息。你能详细说明一下吗?

嗨,你的猜测是正确的:我想通过将一条流与另一条流进行比较来分析它。这两个流应该来自两个不同的设备,这意味着它们(应该)编码不同。即使它们使用相同的编码格式进行编码(例如H264编解码器)。我想看看这些区别到底是什么。我认为运动矢量和DCT系数是这些差异可能存在的两个方面。但不幸的是,我不太明白为什么FFmpeg开发人员不推荐这段信息……我建议使用流分析器。我知道这些东西并不总是免费的,但你的时间也不总是免费的……那么你将不幸地不得不修补ffmpeg(或使用旧版本)。。。同样,我认为他们很高兴拥有这个功能,API应该更加通用,因此,随着这一点的改变,他们可能会接受一个补丁重新引入这个功能(或恢复其删除)是的,我现在唯一能想到的获得这些不推荐但重要属性的方法是查看ffmpeg库,并在库中正确的位置插入一些printf方法。但这将花费我很多精力…顺便说一句,在AVFrame->side_data struct中,我确实找到了运动向量。非常感谢。