17

我需要一个可以处理常见媒体格式的媒体信息提取库(纯 Java 或 JNI 包装器)。我主要将它用于视频文件,我至少需要这些信息:

  1. 视频长度(运行时)
  2. 视频比特率
  3. 视频帧率
  4. 视频格式和编解码器
  5. 视频尺寸(宽 X 高)
  6. 音频通道
  7. 音频格式
  8. 音频比特率和采样率

周围有几个库和工具,但我找不到 Java。

4

4 回答 4

13

在问了这个问题几天后,我发现MediaInfo提供了有关视频或音频文件的数十种技术和标签信息。

在subs4me源代码树中有一个 MediaInfo 的 JNI 包装器 ,我觉得它非常有用。以下是一些代码片段,展示了如何从媒体文件中提取一些信息:

String fileName   = "path/to/my/file";
File file         = new File(fileName);
MediaInfo info    = new MediaInfo();
info.open(file);

String format     = info.get(MediaInfo.StreamKind.Video, i, "Format", 
                        MediaInfo.InfoKind.Text, MediaInfo.InfoKind.Name);
int bitRate       = info.get(MediaInfo.StreamKind.Video, i, "BitRate", 
                        MediaInfo.InfoKind.Text, MediaInfo.InfoKind.Name);
float frameRate   = info.get(MediaInfo.StreamKind.Video, i, "FrameRate", 
                        MediaInfo.InfoKind.Text, MediaInfo.InfoKind.Name);
short width       = info.get(MediaInfo.StreamKind.Video, i, "Width", 
                        MediaInfo.InfoKind.Text, MediaInfo.InfoKind.Name);

int audioBitrate  = info.get(MediaInfo.StreamKind.Audio, i, "BitRate", 
                        MediaInfo.InfoKind.Text, MediaInfo.InfoKind.Name);
int audioChannels = info.get(MediaInfo.StreamKind.Audio, i, "Channels", 
                        MediaInfo.InfoKind.Text, MediaInfo.InfoKind.Name);

请注意,上面的代码是一个基本示例,不包含任何错误检查(这在实际场景中是一个坏习惯)。另请注意,您可以使用 MediaInfo 提取的信息不限于上述信息。请参阅 MediaInfo 的原始输出以了解您可以提取或读取哪种媒体信息MediaInfo C++ SDK

于 2011-08-18T22:25:14.867 回答
1

你不需要一个框架来处理这些东西,例如 AVI 视频容器格式有一个56 字节的标题,其中包含所有相关的元数据。该站点上还有许多其他格式,所有这些格式似乎都很难实现。

于 2010-01-30T17:55:23.427 回答
1

试试Xuggler。这是一些 Xuggler源代码,用于查询媒体文件并打印出各种有用的元数据。

  • 艺术
于 2010-02-03T04:19:36.450 回答
0

您是否尝试过 Java Media Framework API http://java.sun.com/javase/technologies/desktop/media/jmf/但我不确定它是否会像上面使用 FFMpeg 的 Xuggle 那样有足够的支持,这是使用 FFMpeg 的唯一优势这将是跨平台支持。

于 2010-05-07T17:34:33.313 回答