-2

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

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

现在,我让我的程序执行

mplayer -identify animfile.avi

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

我试过了

vlc -vv animfile.avi

它在控制台上打印出大量垃圾,有时包含我正在寻找的东西。不过,格式和打印的数据似乎因动画的文件格式而异。

有没有一种更简单的方法可以从任何格式的动画中提取基本信息,一个使用 vlc 或其他通常在典型 Linux 安装上可用的应用程序/库的解码器(尤其是动画的长度)?

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

编辑:totem-video-indexer 似乎更有希望,并且也包含在标准安装中。然而,没有足够的编解码器使其有用。这可以通过从 medibuntu 安装“非免费编解码器”包来解决。

4

3 回答 3

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
于 2009-10-09T13:25:11.060 回答
0

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

http://mediainfo.sf.net/

于 2009-12-09T22:31:33.680 回答
-1

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

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

无论如何,由于您的问题被标记为 C++,我猜您宁愿读取文件并直接获取数据,也不愿依赖产生其他东西来完成肮脏的工作。如果是这样,您可能想查看OpenDML AVI 文件规范。您至少可以通过阅读基本的 AVI 标头来了解长度、分辨率和帧速率,该标头位于文件开头的固定位置,因此获取这些内容是微不足道的。不过,要达到像素纵横比还需要做更多的工作......

于 2009-10-09T14:33:41.117 回答