web-dev-qa-db-ja.com

Javaのメディア情報エクストラクタ

一般的なメディア形式を処理できるメディア情報抽出ライブラリ(純粋なJavaまたはJNIラッパー))が必要です。主にビデオファイルに使用し、少なくとも次の情報が必要です。

  1. ビデオの長さ(ランタイム)
  2. ビデオビットレート
  3. ビデオフレームレート
  4. ビデオフォーマットとコーデック
  5. ビデオサイズ(幅X高さ)
  6. オーディオチャンネル
  7. オーディオフォーマット
  8. オーディオのビットレートとサンプリングレート

周りにはいくつかのライブラリとツールがありますが、Java用には見つかりませんでした。

17
Emre Yazici

この質問を数日行った後、私は 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

13
Emre Yazici

FileBotソースには、オリジナルで最もよく維持されているMediaInfoJNAラッパーが含まれています。

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

OSSFileBotでMediaInfoネイティブライブラリを2年以上使用しています。すべてのプラットフォームで非常にうまく機能します。 Windows、Linux、MacOS、さらには組み込みLinux(ARM)。

http://www.filebot.net/

4
rednoah

Xuggler を試してください。メディアファイルをクエリし、あらゆる種類の有用なメタデータを出力するXuggler ソースコード を次に示します。

  • アート
1
Art Clarke

このようなフレームワークは必要ありません。たとえば、AVIビデオコンテナ形式には、関連するすべてのメタデータを含む 56バイトヘッダー があります。 そのサイトには他にもたくさんのフォーマットがあります 、それらはすべて実装するのが非常に簡単なようです。

1
Esko

Java Media Framework API http://Java.Sun.com/javase/technologies/desktop/media/jmf/ を試しましたが、それかどうかはわかりません上記のXuggleはFFMpegを使用するため、十分なサポートがあります。これを使用する唯一の利点は、クロスプラットフォームのサポートです。

0