解析流中 apts 与 vpts的分布

流中 apts 与 vpts的分布情况,同时使用图显示出来

一,最好的方式是使用EasyICE 来查看,这个自动化工具是很好用的:

二, 当EasyICE不能打出理想的数据的时候,可以自己来提取数据,画出对应的图:

        本方法只针对流中帧数小于5000帧的,大于5000帧,操作起来将比较费时。

1. 使用ffmpeg的命令行提取每一帧的信息,并使用xml的方式输出 到 指定的文件中,具体命令为:

        ffprobe.exe -show_frames -of xml 1.ts > 0513_1546.log

2. 使用notepad 打开 0513_1546.log 文件,可以看到每一帧的信息,其中包括帧类型,以及每帧数据对应的pts:

3. 通过 关键字过滤出有帧类型和pts 的行:

4. 通过notepad 的列处理能力,直接复制单列的 数据,我们这里复制media_type的值 和 pkt_pts的值, 将这些值拷贝到 Excel中 :

5. 使用Excel的数据透视表功能来让Audio和video分离,同时找到他们对应的pts,对应的设置如下:

6. 将上面的Audio和video对应的数据拷贝出来,之后对选中的数据插入折线图:

7. 出现折线图后, 可以选中修改纵轴的最小值来让图片更立体

  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Linux中使用C语言代码打开并展示EMF文件,你可以使用X11图形库来创建一个窗口并在其中显示EMF文件内容。以下是一个简单的程序,可以打开并显示EMF文件: ```c #include <stdio.h> #include <stdlib.h> #include <X11/Xlib.h> #include <X11/Xutil.h> #include <libEMF/emf.h> int main(int argc, char **argv) { EMF_HANDLE handle; EMR *record; int i; if (argc < 2) { printf("Usage: %s <filename.emf>\n", argv[0]); return 1; } handle = EMF_LoadFile(argv[1]); if (handle == NULL) { printf("Failed to open file %s\n", argv[1]); return 2; } Display *display = XOpenDisplay(NULL); if (!display) { printf("Failed to open X11 display\n"); return 3; } int screen = DefaultScreen(display); Window root_window = RootWindow(display, screen); Window window = XCreateSimpleWindow(display, root_window, 0, 0, 640, 480, 0, BlackPixel(display, screen), WhitePixel(display, screen)); XSelectInput(display, window, ExposureMask | KeyPressMask); XMapWindow(display, window); GC gc = XCreateGC(display, window, 0, NULL); while (1) { XEvent event; XNextEvent(display, &event); if (event.type == Expose) { for (i = 0; i < EMF_GetNumRecords(handle); i++) { record = EMF_GetRecord(handle, i); // 处理EMF记录,绘制到窗口中 switch (record->iType) { case EMR_HEADER: // 处理EMF文件头 break; case EMR_POLYLINE: { EMRPOLYLINE *polyline = (EMRPOLYLINE *)record; XPoint *points = malloc(polyline->cpts * sizeof(XPoint)); int j; for (j = 0; j < polyline->cpts; j++) { points[j].x = polyline->apts[j].x; points[j].y = -polyline->apts[j].y; // Y坐标需要翻转 } XDrawLines(display, window, gc, points, polyline->cpts, CoordModeOrigin); free(points); break; } // 处理其他EMF记录类型 default: break; } } } else if (event.type == KeyPress) { break; } } XFreeGC(display, gc); XDestroyWindow(display, window); XCloseDisplay(display); EMF_CloseFile(handle); return 0; } ``` 在程序中,我们首先使用`EMF_LoadFile`函数打开EMF文件,并将返回的句柄保存在`handle`变量中。然后,我们使用X11图形库创建一个窗口,并在窗口的Expose事件中处理EMF记录,并将它们绘制到窗口中。在这个例子中,我们只是处理了EMR_POLYLINE记录类型,并将它们绘制成线条,但是你可以根据需要处理其他记录类型并将它们绘制到窗口中。最后,我们在窗口的KeyPress事件中退出程序,并关闭文件和释放资源。 需要注意的是,使用X11图形库需要先安装它,可以使用以下命令在Ubuntu中安装: ```bash sudo apt-get install libx11-dev ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值