一般的なメディア形式を処理できるメディア情報抽出ライブラリ(純粋なJavaまたはJNIラッパー))が必要です。主にビデオファイルに使用し、少なくとも次の情報が必要です。
周りにはいくつかのライブラリとツールがありますが、Java用には見つかりませんでした。
この質問を数日行った後、私は MediaInfo を見つけました。これは、ビデオまたはオーディオファイルに関する数十の技術情報とタグ情報を提供します。
MediaInfoのJNIラッパーが subs4me の ソースツリー にあり、非常に便利です。メディアファイルから情報を抽出する方法を示すコードスニペットを次に示します。
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ソースには、オリジナルで最もよく維持されているMediaInfoJNAラッパーが含まれています。
https://github.com/filebot/filebot/blob/master/source/net/filebot/mediainfo/MediaInfo.Java
OSSFileBotでMediaInfoネイティブライブラリを2年以上使用しています。すべてのプラットフォームで非常にうまく機能します。 Windows、Linux、MacOS、さらには組み込みLinux(ARM)。
このようなフレームワークは必要ありません。たとえば、AVIビデオコンテナ形式には、関連するすべてのメタデータを含む 56バイトヘッダー があります。 そのサイトには他にもたくさんのフォーマットがあります 、それらはすべて実装するのが非常に簡単なようです。
Java Media Framework API http://Java.Sun.com/javase/technologies/desktop/media/jmf/ を試しましたが、それかどうかはわかりません上記のXuggleはFFMpegを使用するため、十分なサポートがあります。これを使用する唯一の利点は、クロスプラットフォームのサポートです。