一般的なメディア形式を処理できるメディア情報抽出ライブラリ (純粋な Java または JNI ラッパー) が必要です。主に動画ファイルに使用しており、少なくとも次の情報が必要です。
- ビデオの長さ (ランタイム)
- ビデオのビットレート
- 動画のフレームレート
- ビデオ形式とコーデック
- 動画サイズ(幅×高さ)
- オーディオチャンネル
- 音声フォーマット
- オーディオのビットレートとサンプリング レート
周りにはいくつかのライブラリとツールがありますが、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 C++ SDKを抽出または読み取ることができるメディア情報の種類については、MediaInfo の生の出力を参照してください。
このようなフレームワークは必要ありません。たとえば、AVI ビデオ コンテナー形式には、関連するすべてのメタデータを含む56 バイトのヘッダーがあります。そのサイトには他にもたくさんのフォーマットがあり、それらはすべて実装するのが非常に簡単なようです.
Xugglerを試してください。以下は、メディア ファイルを照会し、あらゆる種類の有用なメタデータを出力するXuggler のソース コードです。
Java Media Framework API http://java.sun.com/javase/technologies/desktop/media/jmf/を試しましたか? しかし、FFMpeg を使用する上記の Xuggle として十分なサポートがあるかどうかはわかりません。これはクロスプラットフォームのサポートになります。