我需要一个可以处理常见媒体格式的媒体信息提取库(纯Java或JNI包装器)。我主要将它用于视频文件,我至少需要这些信息:
有几个库和工具,但我找不到Java。
答案 0 :(得分:13)
在提出这个问题几天后,我发现MediaInfo提供了有关视频或音频文件的数十种技术和标签信息。
subs4me的source tree中有一个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。
答案 1 :(得分:4)
FileBot源包含原始且维护得最好的MediaInfo JNA包装器:
https://github.com/filebot/filebot/blob/master/source/net/filebot/mediainfo/MediaInfo.java
我在OSS FileBot中使用MediaInfo本机库已有两年多了。在所有平台上都能很好地工作。 Windows,Linux,MacOS甚至嵌入式Linux(ARM)。
答案 2 :(得分:1)
您不需要这个东西的框架,例如AVI视频容器格式包含56 byte header包含所有相关元数据。 There's bunch of other formats on that site too,所有这些似乎都很容易实现。
答案 3 :(得分:1)
试试Xuggler。这里有一些Xuggler source code查询媒体文件并打印出各种有用的元数据。
答案 4 :(得分:0)
您是否尝试过Java Media Framework API http://java.sun.com/javase/technologies/desktop/media/jmf/,但我不确定它是否会有足够的支持,因为上面使用FFMpeg的Xuggle,使用它的唯一好处就是跨平台支持。