2016-04-27 33 views
2

我想打印出来的视频帧的一些属性:我看着AVFrame结构,但只找到了以下失望:AVFrame不赞成使用的属性重新获得?

attribute_deprecated short * dct_coeff 
attribute_deprecated uint32_t *  mb_type 

在我看来,一切我感兴趣的是已经过时了。顺便说一句,我没有找到

int16_t(*[2] motion_val)[2] 

属性在我捕获的实际框架。我的问题是:我怎样才能访问这些属性,如dct_coeff或motion_vector或帧的mb_type呢?

回答

0

参见av_frame_get_side_data(frame,AV_FRAME_DATA_MOTION_VECTORS)对于运动矢量。另外两个没有替换。该文档声明它们是特定于MPEG并使用内部实现细节,这就是为什么不提供替换。

(不要忘记设置avctx->flags2&AV_CODEC_FLAG2_EXPORT_MVS,否则它不出口。)

对于两个没有更换,我明白,如果你是例如您可能希望这种类型的信息编写一个流分析器,但是FFmpeg现在确实不提供流分析器级的API。他们可以 - 如果有更通用的API - 显然可以作为单独的边数据类型添加。如果你需要,你应该成为一个FFmpeg开发者,并且开发一个不是MPEG专用的更广泛的API(例如,不使用mb_type的内部宏),甚至可能为其他编解码器实现它。在其他任何情况下,我都不明白你为什么要这样的信息。你能详细说明吗?

+0

嗨,你的猜测是正确的:我想分析一个流通过比较它与另一个流。这两个流应该来自两个不同的设备,这意味着他们(应该是)编码不同。尽管它们使用相同的编码格式(例如H264编解码器)编码。我想研究这些差异究竟是什么。我认为运动矢量和DCT系数是这些差异可能存在的两个方面。但不幸的是,我不太明白为什么FFmpeg开发人员不赞成使用这一信息... – Kindermann

+0

我会推荐使用流分析器。我知道这些东西并不总是免费的,但你的时间也不是一样的...... –

+0

我必须使用ffmpeg API编程分析仪... – Kindermann