如何以编程方式确定Windows中的视频尺寸

时间:2011-04-08 20:40:01

标签: windows video

我正在尝试为我正在编写的程序添加一项功能,以确定视频文件的宽度和高度(可以使用浏览..按钮进行选择)。我正在使用Python和Qt,我看了一遍,似乎无法找到任何帮助。视频格式目前是.flv,但将来会扩展到包括其他格式,如H.264。

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

有什么想法吗?

由于

马龙

1 个答案:

答案 0 :(得分:2)

Windows资源管理器会读取此信息的文件标题。

我看到3个选项:

  • 您可以手动解析标题,寻找元数据信息(天哪,请不要)
  • 使用cmd-line工具并解析它的输出(检查popen()以了解如何执行此操作)
  • 使用第三方库从视频文件中检索相关信息

我假设你想做的更容易。我认为围绕像mediainfo这样的cmd-line工具编写一个包装器,用于显示视频文件的信息,然后解析它的输出以捕获视频属性会更容易。如果您的系统上已经安装了ffmpeg,那么您也可以使用它。

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

  // 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