Java的媒体信息提取器

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

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

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

在问了几天这个问题之后,我发现MediaInfo提供了很多关于video或音频文件的技术和标签信息。

在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的哪种媒体信息。

FileBot源包含原始且维护得最好的MediaInfo JNA包装器:

https://github.com/filebot/filebot/blob/master/source/net/filebot/mediainfo/MediaInfo.java

我已经在我的OSS FileBot中使用MediaInfo本机库超过2年了。 在所有平台上都能很好地工作。 Windows,Linux,MacOS甚至嵌入式Linux(ARM)。

http://www.filebot.net/

你不需要这个东西的框架,例如AVIvideo容器格式有一个包含所有相关元数据的56字节头 。 该网站上还有许多其他格式 ,所有这些格式似乎都非常简单。

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

  • 艺术