2009-10-09 36 views
-1

我正在写处理元数据,图像和各种动画的应用程序,所以我在寻找一种方式来找到一个动画文件的基本信息,如:从提取的动画文件的基本信息

  • 长度(以分钟/秒/帧)
  • 像素的纵横比
  • 分辨率各个帧
  • 帧率

的R现在的洞察力,我让我的程序执行

mplayer -identify animfile.avi 

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

我已经试过

vlc -vv animfile.avi 

它打印在控制台上的垃圾不敬虔的量,有时含有我在找东西。虽然格式化和打印的数据似乎取决于动画的文件格式。

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

编辑:我宁愿使用其他程序做肮脏的工作,因为这应该是任何动画格式,如AVI,MPG,MOV,WMV,VOB等工作

编辑:totem-视频索引器看起来更有希望,并且也包含在标准安装中。但是,足够的编解码器使其非常有用,但它不是。这可以通过从medibuntu安装“非免费编解码器”包来解决。

回答

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

这比你可以实现一个小更棘手的问题。 AVI文件格式随着时间的推移而增长,并且在两个或三个不同的地方通常具有几乎相同的信息。在某些情况下,这些实际上应该同意(但有时不这样做),而在其他情况下,它们会有微妙的差异。

就比如,你问的宽度和高度。实际上有用于单个帧四个不同的宽度/高度规格:屏幕宽度/高度,像素宽度/高度(从中推导出像素纵横比),有源宽度/高度,并且压缩的宽度/高度。框架宽度和高度是屏幕的(理论)尺寸。有效宽度/高度不包括过扫描区域。压缩的宽度/高度考虑到舍入 - 例如,JPEG 8×8像素块进行压缩,所以压缩宽度和高度必须是用于运动JPEG文件8的倍数。活动宽度/高度告诉您是否(例如)边框上的某些像素应该被忽略。

在任何情况下,由于您的问题被标记C++,我会想你宁愿读取该文件,并直接获取数据不是取决于产卵点别的事情做肮脏的工作。如果是这样,你可能想看看OpenDML AVI file spec。你可以通过阅读基本的AVI头文件来了解文件的长度,分辨率和帧速率,这些头文件位于文件开头的固定位置,所以很容易获得。它需要更多的工作才能达到像素的纵横比...

-1

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

http://mediainfo.sf.net/