适用于 Java 的媒体信息提取器 [已关闭]
2022-09-03 02:23:03
我需要一个可以处理常见媒体格式的媒体信息提取库(纯Java或JNI包装器)。我主要将其用于视频文件,我至少需要以下信息:
- 视频长度(运行时间)
- 视频比特率
- 视频帧速率
- 视频格式和编解码器
- 视频大小(宽 X 高)
- 音频通道
- 音频格式
- 音频比特率和采样率
周围有几个库和工具,但我找不到Java。
我需要一个可以处理常见媒体格式的媒体信息提取库(纯Java或JNI包装器)。我主要将其用于视频文件,我至少需要以下信息:
周围有几个库和工具,但我找不到Java。
问了几天这个问题后,我发现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 的原始输出,了解您可以在 SDK C++提取或读取哪种媒体信息。