2010-01-30 24 views
14

Necesito una biblioteca de extracción de información de medios (contenedor Java o JNI puro) que pueda manejar formatos de medios comunes. Yo sobre todo lo uso para archivos de vídeo y necesito al menos esta información:Extractor de información de medios para Java

  1. Duración del vídeo (tiempo de ejecución)
  2. vídeo tasa de bits
  3. vídeo de imágenes por segundo
  4. formato de vídeo y el codec
  5. Tamaño de vídeo (ancho x alto)
  6. canales de audio en formato de audio
  7. tasa de bits de audio y Sam pling rate

Existen varias bibliotecas y herramientas pero no pude encontrar para Java.

+0

qué formatos/codificaciones estamos hablando aquí? Las personas tienen diferentes definiciones de "común" para los formatos de medios. – aperkins

+0

Me refiero a MPEG, DivX, XviD, Matroska, Real Video, formatos de Windows Media para videos; MP3 y AC3 para audios. No hay ciertos formatos específicamente que necesito, así que cuanto más soporte de formato, mejor para mí. –

+0

¿Está destinado subs4me para la plataforma Linux solamente? cuando probé su muestra, toqué la excepción debido a esta línea en lib 'if (! (Platform.isLinux())) return;' – kitokid

Respuesta

10

Después de unos días de hacer esta pregunta, he encontrado MediaInfo que proporciona docenas de información técnica y de etiquetas sobre un archivo de audio o video.

Hay un contenedor JNI para MediaInfo en subs4me 's source tree que me parece muy útil. Éstos son algunos fragmentos de código que muestran cómo extraer información de un archivo multimedia:

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); 

Tenga en cuenta que el código anterior es un ejemplo básico y no contiene ninguna comprobación de errores (que es un mal hábito en una verdadera guión). También tenga en cuenta que la información que puede extraer con MediaInfo no se limita a los anteriores. Consulte la salida sin procesar de MediaInfo para saber qué tipo de información multimedia puede extraer o leer MediaInfo C++ SDK.

+0

¿Está destinado subs4me para la plataforma Linux solamente? cuando probé su muestra, toqué la excepción debido a esta línea en lib si (! (Platform.isLinux())) return; – kitokid

+0

No estoy seguro de que subs4me sea completamente portátil. Estoy usando el código anterior en Windows sin ningún problema. –

+0

Hola Emre, ¿podrías compartirme el uso de subs4me? Acabo de poner su archivo jar en mi proyecto y tomar el MediaInfo. pero arroja java.lang.NoClassDefFoundError al llamar a la clase MediaInfo info = new MediaInfo() ;. ¿Alguna falta o pasos necesarios, entonces puedo usar subs4me? Estoy perdido. Gracias. – kitokid

1

No necesita un marco para esto, por ejemplo, el formato de contenedor de video AVI tiene un 56 byte header que contiene todos los metadatos relevantes. There's bunch of other formats on that site too, todos ellos parecen ser bastante triviales de implementar.

+0

No estoy escribiendo una herramienta de extracción de información multimedia, por lo que no quiero aprender cada formato de medios e implementar la clase de extracción adecuada. También tenga en cuenta que hay numerosos formatos de contenedores que tienen una estructura mucho más compleja (y algunos de ellos son de propiedad), AVI es uno de los casos más simples. –

1

Pruebe Xuggler. Aquí hay un Xuggler source code que consulta un archivo multimedia e imprime todo tipo de metadatos útiles.

  • Arte
+0

en desuso: use javacv –

Cuestiones relacionadas