web-dev-qa-db-ja.com

mp4ファイル用のJava APIはありますか?

Mp3ファイルはこれを使用して処理できます mp3 SPI support ですが、mp4ファイルに似たものは見つかりません。

どんな助けでもいただければ幸いです。

- 更新

私がやりたいのは、次のコードを使用してWaveファイルで行うように、ファイルのサイズを取得することです。

AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(file);
AudioFormat format = audioInputStream.getFormat();
long audioFileLength = file.length();
int frameSize = format.getFrameSize();
float frameRate = format.getFrameRate();
float durationInSeconds = (audioFileLength / (frameSize * frameRate));

- 回答

@mdma(IBMツールキット)のヒントを使用した回答コードは次のとおりです。

/**
 * Use IBMPlayerForMpeg4SDK to get mp4 file duration.
 * 
 * @return the mp4File duration in milliseconds.
 */
public static long getMp4Duration(File mp4File) throws IllegalStateException, IOException {
PlayerControl playerControl = PlayerFactory.createLightweightMPEG4Player();
playerControl.open(mp4File.getAbsolutePath());
long mili = playerControl.getDuration();
// int sec = (int) ((mili / 1000) % 60);
// int min = (int) ((mili / 1000) / 60);
// System.out.println("IBM Tookit result = " + min + ":" + sec);
return mili;
}

-

関連する、言語に依存しない、質問: mp4データ構造に精通している人はいますか?

11
Tom Brito

Mp4はコンテナ形式です。内部のオーディオの長さを見つけるには、最初にコンテナからコンテンツを解析する必要があります。 isobox mp4parser を使用して、mp4ファイルのコンテンツを抽出できます。

それが完了すると、生のオーディオデータが得られます。 Java(wav、mp3など)でサポートされている形式の1つである場合は、wavの場合と同じように、このファイルを開くことができます。最初は、オーディオを次のように抽出します。簡単にするため、デバッグを簡単にするために、別のファイルを作成します。これが機能している場合は、インラインで抽出を実行できます。mp4からオーディオコンテンツをオンザフライで抽出するInputStreamFilterを実装するため、追加の外部ファイルは必要ありません。

IBM Alphaworks 純粋なJava MP4デコーダーライブラリが利用可能ですが、現在のニーズには多分やり過ぎです。

14
mdma

Xuggler( http://www.xuggle.com/xuggler/ )は、私が見た中で最高のJavaラッパーのFFMPEG)を提供します。ほとんどすべてのファイルから画像をデコードしてから、好きなように操作します。

8
Curtis

やりたいことを指定しません。ファイルを再生したいだけの場合は、MPlayerを使用して、ProcessBuilderAPIとstdioを介してリモートで制御できます。

0
Aaron Digulla