是否有用于mp4文件的Java API?

Tom*_*ito 10 java audio file-io mp4

可以使用这个mp3 SPI支持处理Mp3文件,但我找不到类似于mp4文件的东西.

任何帮助,将不胜感激.

--update

我想要做的是获取文件的大小,就像使用此代码处理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));
Run Code Online (Sandbox Code Playgroud)

- 回答

以下是使用@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;
}
Run Code Online (Sandbox Code Playgroud)

-

相关,语言无关,问题: 有谁熟悉mp4数据结构?

mdm*_*dma 14

Mp4是一种容器格式 - 为了能够找到内部音频的持续时间,您必须首先从容器中解析内容.您可以使用isobox mp4parser提取mp4文件的内容.

完成后,您就可以获得原始音频数据了.如果它是java(wav,mp3等等)中支持的格式之一,那么你可以像打开wavs一样打开这个文件.最初,您可能会将音频提取到单独的文件中,以简化和简化调试.当这个工作时,你可以进行内联提取 - 你实现了一个InputStreamFilter,它可以动态地从mp4中提取音频内容,因此不需要额外的外部文件.

IBM Alphaworks提供了一个纯Java MP4解码器库,但它可能会满足您当前的需求.

  • @TomBrito我真的很想,但这个项目的文档太差了.. (2认同)

Cur*_*tis 8

Xuggler(http://www.xuggle.com/xuggler/)提供了我见过的最好的FFMPEG Java包装器 - 它可以让你从几乎任何文件中解码图像,然后做你喜欢的任何事情他们.

  • Xuggler现在将本机文件与提供的JAR文件组合在一起,不需要DLL! (2认同)