从动画文件中提取基本信息

时间:2009-10-09 13:17:33

标签: c++ linux qt4 vlc

我正在编写一个处理图像和各种动画元数据的应用程序,所以我正在寻找一种方法来查找有关动画文件的基本信息,例如:

  • 长度(以分钟/秒/帧为单位)
  • 像素的宽高比
  • 单个帧的分辨率
  • 帧率

现在,我让我的程序执行

mplayer -identify animfile.avi

并解析其控制台输出,其中包含机器可读格式所需的所有信息。这很好用,但我知道该程序的一些潜在用户更喜欢 vlc 作为媒体播放器,所以我宁愿避免对安装mplayer有严格的依赖。

我试过

vlc -vv animfile.avi

在控制台上打印了一大堆垃圾,有时包含我正在寻找的东西。格式化和打印的数据似乎取决于动画的文件格式。

是否有更简单的方法从使用vlc或som其他应用程序/库(通常在典型的Linux安装中可用)的任何具有解码器(特别是动画长度)的格式的动画中提取基本信息?< / p>

编辑:我宁愿使用另一个程序来做脏工作,因为它应该适用于任何动画格式,例如avi,mpg,mov,wmv,vob等。

编辑:totem-video-indexer似乎更有前景,并且也包含在标准安装中。然而,足够的编解码器使其有用,却没有。这可以通过安装medibuntu的“non-free-codecs”软件包来解决。

3 个答案:

答案 0 :(得分:1)

totem-video-indexer的输出很容易解析:

TOTEM_INFO_DURATION=5217
TOTEM_INFO_HAS_VIDEO=True
TOTEM_INFO_VIDEO_WIDTH=720
TOTEM_INFO_VIDEO_HEIGHT=480
TOTEM_INFO_VIDEO_CODEC=XVID MPEG-4
TOTEM_INFO_FPS=30
TOTEM_INFO_HAS_AUDIO=True
TOTEM_INFO_AUDIO_BITRATE=50
TOTEM_INFO_AUDIO_CODEC=MPEG 1 Audio, Layer 3 (MP3)
TOTEM_INFO_AUDIO_SAMPLE_RATE=48000
TOTEM_INFO_AUDIO_CHANNELS=Stereo

答案 1 :(得分:0)

mediainfo是一个非常有用的程序。这是LGPL,它只是libmediainfo的前端,它应该是你想要的。

http://mediainfo.sf.net/

答案 2 :(得分:-1)

这是一个比你可能意识到的更困难的问题。 AVI文件格式随着时间的推移而增长,并且在两个或三个不同的地方通常具有几乎相同的信息。在某些情况下,那些人真的应该同意(但有时候不同意),而在其他情况下,他们会略有不同。

例如,您询问了宽度和高度。实际上,单个帧有四种不同的宽度/高度规格:屏幕宽度/高度,像素宽度/高度(从中获得像素长宽比),活动宽度/高度以及压缩宽度/高度。框架宽度和高度是屏幕的(理论)尺寸。有效宽度/高度不包括过扫描区域。压缩的宽度/高度考虑了舍入 - 例如,JPEG压缩为8x8像素的块,因此压缩的宽度和高度必须是动态JPEG文件的8的倍数。有效宽度/高度告诉您(例如)是否应忽略边框处的某些像素。

在任何情况下,由于你的问题被标记为C ++,我猜你宁愿阅读文件并直接获取数据,而不是依赖于产生其他东西来做脏工作。如果是这样,您可能想要查看OpenDML AVI file spec。你可以通过读取基本的AVI标题来获得长度,分辨率和帧率的至少一些信息,这个标题位于文件开头的一个固定位置,因此可以获得很多。要获得像素长宽比需要更多的工作......