如何在windows中以编程方式确定视频尺寸

如何在windows中以编程方式确定视频尺寸,windows,video,Windows,Video,我正在尝试向正在编写的程序中添加一个功能,以确定视频文件的宽度和高度(可以使用browse..按钮选择)。我正在使用Python和Qt,我已经到处找了,似乎找不到任何帮助。视频格式目前为.flv,但将来将扩展为包括H.264等其他格式 如果我右键单击文件并选择“属性”,然后选择“摘要”选项卡并单击“高级”,Windows资源管理器可以告诉我视频尺寸。那里显示的宽度和高度正是我所需要的 有什么想法吗 谢谢 MarlonWindows资源管理器读取此信息的文件头 我看到3种选择: 您可以手动解析标

我正在尝试向正在编写的程序中添加一个功能,以确定视频文件的宽度和高度(可以使用browse..按钮选择)。我正在使用Python和Qt,我已经到处找了,似乎找不到任何帮助。视频格式目前为.flv,但将来将扩展为包括H.264等其他格式

如果我右键单击文件并选择“属性”,然后选择“摘要”选项卡并单击“高级”,Windows资源管理器可以告诉我视频尺寸。那里显示的宽度和高度正是我所需要的

有什么想法吗

谢谢


Marlon

Windows资源管理器读取此信息的文件头

我看到3种选择:

  • 您可以手动解析标头以查找元数据信息(哦,天哪,请不要这样做)
  • 使用cmd行工具并解析它的输出(检查以了解如何操作)
  • 使用第三方库从视频文件中检索相关信息
我想你想做更容易的事。我认为围绕cmd行工具编写一个包装器(如用于显示视频文件上的信息,然后解析其输出以捕获视频属性)会更容易。如果你已经在你的系统上安装了,你也可以这样做

另一种方法是使用第三方库,例如libavformat(它是ffmpeg的一部分)来读取视频属性。有关完整的演示,请查看:

//注册所有格式和编解码器
av_寄存器_all();
//打开视频文件
如果(av打开输入文件(&pFormatCtx,argv[1],NULL,0,NULL)!=0)
返回-1;//无法打开文件
//检索流信息
如果(av)查找流信息(pFormatCtx)流[视频流]->编解码器;
//此处的相关结构为:pCodecCtx
//更精确地说:pCodecCtx->宽度和pCodecCtx->高度
  // Register all formats and codecs
  av_register_all();

  // Open video file
  if(av_open_input_file(&pFormatCtx, argv[1], NULL, 0, NULL)!=0)
    return -1; // Couldn't open file

  // Retrieve stream information
  if(av_find_stream_info(pFormatCtx)<0)
    return -1; // Couldn't find stream information

  // Find the first video stream
  videoStream=-1;
  for(i=0; i<pFormatCtx->nb_streams; i++)
    if(pFormatCtx->streams[i]->codec->codec_type==CODEC_TYPE_VIDEO) {
      videoStream=i;
      break;
    }
  if(videoStream==-1)
    return -1; // Didn't find a video stream

  // Get a pointer to the codec context for the video stream
  pCodecCtx=pFormatCtx->streams[videoStream]->codec;

  // The relevant structure here is: pCodecCtx
  // More precisely: pCodecCtx->width and pCodecCtx->height