如何从各种视频文件格式中提取元数据?

时间:2011-02-09 06:31:49

标签: java video

如何从各种视频文件格式中提取元数据,尤其是分辨率和使用的编解码器类型。 (还有像作家这样的所有其他东西)。我无法为此找到一个库。

3 个答案:

答案 0 :(得分:5)

我找到了MediaInfo,它提供了很多关于视频或音频文件的技术和标签信息。

subs4me's source tree中的MediaInfo有一个JNI包装器,我发现它非常有用。

以下是一些代码段,展示了如何从媒体文件中提取一些信息:

File file         = new File("path/to/my/file");
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);

答案 1 :(得分:3)

vikiiii解决方案有效,但我找到了:

  • 在桌面上运行所有内容仍需要一些工作。 (下载DLL,解压缩代码,浏览文件......)
  • 我们不知道常量(如“BitRate”)

因此,我安装了Windows MediaInfo应用程序并搜索了可用于创建一些Java Enum并轻松使用的密钥。

我在github https://github.com/clun/movies-metadata上创建了一个存储库,让所有东西都放在同一个地方。只需在示例项目上运行mvn:test即可获得有关样本MP4,OGG,AVI,FLV,WEBM和MKV的信息。

这里是测试的示例代码:

  MovieMetadata movieMedataData = new MovieMetadata("./src/test/resources/small.mkv");
    movieMedataData.get(General.FORMAT);
    movieMedataData.get(Video.DURATION_STRING);
    movieMedataData.get(Video.WIDTH_STRING);
    movieMedataData.get(Video.HEIGHT_STRING);
    movieMedataData.get(Video.BITRATE_STRING);
    movieMedataData.get(Audio.COMPRESSION_RATIO);
    //...

答案 2 :(得分:-4)