Средство массовой информации для Java

Мне нужна библиотека для извлечения медиаинформации (чистая оболочка Java или JNI), которая может обрабатывать общие медиаформаты. Я в основном использую его для видеофайлов, и мне нужна, по крайней мере, такая информация:

  • Длина видео (время выполнения)
  • Битрейт видео
  • Частота кадров видео
  • Формат видео и кодек
  • Размер видео (ширина X высота)
  • Аудиоканалы
  • Аудиоформат
  • Битрейт аудио и частота дискретизации

Существует несколько библиотек и инструментов, но я не могу найти для Java.

Ответы

Ответ 1

Спустя несколько дней, задав этот вопрос, я нашел MediaInfo, который предоставляет десятки технических и тегов информации о видео или аудио файл.

Существует оболочка JNI для MediaInfo в 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 С++ SDK.

Ответ 2

Источник FileBot содержит оригинальную и наилучшую поддерживаемую оболочку MediaInfo JNA:

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

Я использую собственные библиотеки MediaInfo в своем OBS FileBot более 2 лет. Хорошо работает на всех платформах. Windows, Linux, MacOS и даже Embedded Linux (ARM).

http://www.filebot.net/

Ответ 4

Попробуйте Xuggler. Здесь некоторый Xuggler исходный код, который запрашивает мультимедийный файл и распечатывает всевозможные полезные метаданные.

  • Искусство

Ответ 5

Вы пробовали Java Media Framework API http://java.sun.com/javase/technologies/desktop/media/jmf/, но я не уверен, будет ли он иметь достаточную поддержку в качестве Xuggle, выше которой используется FFMpeg, единственным преимуществом использования этого является поддержка кросс-платформы.