【问题标题】:How to replace 'flags' with 'frame types' on ffmpeg's extract_mvs.c如何在 ffmpeg 的 extract_mvs.c 上用“帧类型”替换“标志”
【发布时间】:2018-02-15 21:02:06
【问题描述】:

我正在从 ffmpeg 中提取运动矢量以用于计算机视觉项目。我一直在寻找一种简单的方法来以有意义的方式提取这些信息。

在阅读不同的帖子和其他网站时,我在 FFmpeg 的示例文件夹中发现了 extract_mvs.c。我注意到在这个文件生成的数据中(在编译之后)有一个我想修改的标志列,使它打印帧类型而不是 0x0s,如下所示。

我从the author of the code himself 得到的修改标志的想法。

extract_mvs.c文件编译后,返回信息如下:

framenum,source,blockw,blockh,srcx,srcy,dstx,dsty,flags
2,-1,16,16,   8,   8,   8,   8,0x0
2, 1,16,16,   8,   8,   8,   8,0x0
2, 1,16,16,  24,   8,  24,   8,0x0
2, 1,16,16,  40,   8,  40,   8,0x0
2, 1,16,16,  56,   8,  56,   8,0x0
2, 1,16,16,  72,   8,  72,   8,0x0
2, 1,16,16,  88,   8,  88,   8,0x0
...
297, 1,16,16, 248, 280, 248, 280,0x0
297, 1,16,16, 264, 280, 264, 280,0x0
297,-1,16,16, 278, 279, 280, 280,0x0
297, 1,16,16, 280, 280, 280, 280,0x0
297, 1,16,16, 296, 280, 296, 280,0x0
297, 1,16,16, 312, 280, 312, 280,0x0
297, 1,16,16, 328, 280, 328, 280,0x0
297, 1,16,16, 344, 280, 344, 280,0x0

理想情况下我想要实现的是:

framenum,source,blockw,blockh,srcx,srcy,dstx,dsty,frametypes
2,-1,16,16,   8,   8,   8,   8,B
2, 1,16,16,   8,   8,   8,   8,B
2, 1,16,16,  24,   8,  24,   8,B
2, 1,16,16,  40,   8,  40,   8,B
2, 1,16,16,  56,   8,  56,   8,B
2, 1,16,16,  72,   8,  72,   8,B
2, 1,16,16,  88,   8,  88,   8,B
...
297, 1,16,16, 248, 280, 248, 280,P
297, 1,16,16, 264, 280, 264, 280,P
297,-1,16,16, 278, 279, 280, 280,P
297, 1,16,16, 280, 280, 280, 280,P
297, 1,16,16, 296, 280, 296, 280,P
297, 1,16,16, 312, 280, 312, 280,P
297, 1,16,16, 328, 280, 328, 280,P
297, 1,16,16, 344, 280, 344, 280,P

文件is shown here中需要修改的部分,其中mv->flags需要替换为帧类型变量。我想用指针引用 AVFrame 结构并调用 pict-type。但不确定构建块将如何。有什么帮助吗?

【问题讨论】:

    标签: ffmpeg video-processing video-compression


    【解决方案1】:

    我设法找出如何用帧类型替换标志。我只是将this line print function 更改为:

                    printf("%d,%2d,%2d,%2d,%4d,%4d,%4d,%4d,%c\n",
                        video_frame_count, mv->source,
                        mv->w, mv->h, mv->src_x, mv->src_y,
                        mv->dst_x, mv->dst_y, av_get_picture_type_char(frame->pict_type));
    

    然后你可以change this line for the headerflags 来读取frametypes

    printf("framenum,source,blockw,blockh,srcx,srcy,dstx,dsty,frametypes\n")
    

    【讨论】:

    • 感谢分享!似乎该脚本仅打印 P 帧的运动矢量,我猜这很好。
    猜你喜欢
    • 2018-07-23
    • 2015-07-22
    • 1970-01-01
    • 2015-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-09
    • 2016-08-15
    相关资源
    最近更新 更多