Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Como obtener metadatos de un archivo de video (https://www.clubdelphi.com/foros/showthread.php?t=94485)

JoAnCa 01-03-2020 03:47:15

Como obtener metadatos de un archivo de video
 
Hola a tod@s

Pues necesito saber como puedo obtener los metadatos de un archivo multimedia (de video o de audio), algunos de estos son los que aparecen en la pestaña "Detalles" de la ventana Propiedades cuando se hace clic derecho en un archivo multimedia.

En concreto los datos que me interesan son:
Video:
- Duración
- Ancho y Alto del fotograma (tamaño o resolucion)
- Velocidad de bits total (bitrate)
- Codificador de video

Audio:
- Velocidad de bits (bitrate)
- Canales
- Velocidad de muestreo
- Duracion (cuando es un archivo de audio)
- Codificador de audio

En el caso de un archivo de video, son todos los datos, de audio y de video.

ElKurgan 03-03-2020 06:51:52

A lo mejor este enlace te da una pista: Habla sobre importar la librería de tipos del Windows Media Player y usar las funciones que exporta

Un saludo

JoAnCa 03-03-2020 17:08:09

Cita:

Empezado por ElKurgan (Mensaje 536064)
A lo mejor este enlace te da una pista: Habla sobre importar la librería de tipos del Windows Media Player y usar las funciones que exporta

Un saludo


Estuve probando con algo parecido a eso, pero para obtener los datos hay que abrir el video en el reproductor (y cerrarlo después)
Esto en un archivo no se nota tanto (si es corto), pero en una lista de 5, 10 o mas archivos de video demoraría un poco mas dependiendo de la longitud de los videos.



Lo que necesito es encontrar donde se guardan esos datos para leerlos sin necesidad de abrirlo en un reproductor, para que sea mas rapido

Casimiro Notevi 03-03-2020 18:41:03

https://chapmanworld.com/2018/03/14/...ows-in-delphi/

Cita:

Usando la biblioteca de tipos creada al importar el control del reproductor ActiveX, es posible interrogar cualquier video cargado en un reproductor de video. Esto no significa que el reproductor de video deba ser visible tampoco, puede crearse en tiempo de ejecución, interrogarse y desecharse sin tener que colocarlo en un formulario.

JoAnCa 03-03-2020 22:37:22

Cita:

Empezado por Casimiro Notevi (Mensaje 536086)


Cierto, dice que no tiene que estar visible, pero aun así lo abre en segundo plano toma los datos y después lo cierra, todo esto automáticamente.

Casimiro Notevi 04-03-2020 09:16:16

Es que la otra opción que te queda es informarte sobre cómo es el "metadato"/cabecera de cada uno de los tipos de videos que te interesa y hacerlo tú mismo.

bucanero 04-03-2020 10:29:26

En el comentario al enlace que te ha puesto ElKurgan se habla de la herramienta MediaInfo precisamente para obtener este tipo de información, y en este enlace en particular se habla de hacerlo con delphi
https://sourceforge.net/p/mediainfo/...read/a7260d2d/

No se si con esto puedas avanzar algo...

JoAnCa 05-03-2020 21:08:35

Cita:

Empezado por Casimiro Notevi (Mensaje 536090)
Es que la otra opción que te queda es informarte sobre cómo es el "metadato"/cabecera de cada uno de los tipos de videos que te interesa y hacerlo tú mismo.

En este caso tendría que leer los bytes del archivo, algo que nunca he hecho :confused:

Según tengo entendido, tendría que usar TFileStream para leer los bytes del archivo (si me equivoco, rectificame).
Buscando en Google encontré las cabeceras de algunos archivos de video (en este caso un .AVI), pero no se como leer esos valores.

De que forma se haría?


Cita:

En el comentario al enlace que te ha puesto ElKurgan se habla de la herramienta MediaInfo precisamente para obtener este tipo de información, y en este enlace en particular se habla de hacerlo con delphi
https://sourceforge.net/p/mediainfo/...read/a7260d2d/

No se si con esto puedas avanzar algo...
Encontre dos posibles opciones: Tag Library pero no me dan la opción para todos los formatos multimedia, y MedianInfo, que voy a experimentar con el para ver si se ajusta a mis necesidades.

JoAnCa 09-03-2020 01:05:56

Resuelto
 
Pues finalmente resolvi el problema con la libreria MediaInfo ^\||/

MAXIUM 06-04-2020 20:56:09

Cita:

Empezado por JoAnCa (Mensaje 536183)
Pues finalmente resolvi el problema con la libreria MediaInfo ^\||/

Hola, ¿nos puedes decir como lo hicisteis o mejor, un código de ejemplo? Muchas gracias :D

JoAnCa 05-05-2020 20:56:20

Cita:

Empezado por MAXIUM (Mensaje 536609)
Hola, ¿nos puedes decir como lo hicisteis o mejor, un código de ejemplo? Muchas gracias :D

Disculpen, debí comentar como lo hice para que le pueda servir a otros

Pues yo cargo los archivos en un stringlist y de ahi los leo y le obtengo los metadatos con este codigo:

Código Delphi [-]
          if (MediaInfoDLL_Load('MediaInfo.dll') = false) then
            begin
              MsgError('Error al cargar MediaInfo.dll', 'Error');
              Exit;
            end;
          for i:=0 to ListaTagAcum.Count - 1 do
            begin
              Cad:=ListaTagAcum.Strings[i];
              Ruta:=ExtractFilePath(Cad);
              Archivo:=ExtractFileName(Cad);

              Handle:=MediaInfo_New();
              MediaInfo_Open(Handle,PWideChar(Ruta + Archivo)); //--- Abrir el archivo multimedia
              sgListaMetaDatos.Cells[0, i+1]:=Archivo;
              sgListaMetaDatos.Cells[1, i+1]:=MediaInfo_Get(Handle, Stream_General, 0, 'FileSize/String', Info_Text, Info_Name);
              sgListaMetaDatos.Cells[2, i+1]:=MediaInfo_Get(Handle, Stream_General, 0, 'Duration/String2', Info_Text, Info_Name);
              sgListaMetaDatos.Cells[3, i+1]:=MediaInfo_Get(Handle, Stream_General, 0, 'Format', Info_Text, Info_Name);
              Resol:=MediaInfo_Get(Handle, Stream_Video, 0, 'Width', Info_Text, Info_Name) + 'x' + MediaInfo_Get(Handle, Stream_Video, 0, 'Height', Info_Text, Info_Name);
              sgListaMetaDatos.Cells[4, i+1]:=Resol;
              sgListaMetaDatos.Cells[5, i+1]:=MediaInfo_Get(Handle, Stream_General, 0, 'BitRate/String', Info_Text, Info_Name);
              sgListaMetaDatos.Cells[6, i+1]:=MediaInfo_Get(Handle, Stream_Video, 0, 'Format', Info_Text, Info_Name);
              sgListaMetaDatos.Cells[7, i+1]:=MediaInfo_Get(Handle, Stream_Audio, 0, 'BitRate/String', Info_Text, Info_Name);
              sgListaMetaDatos.Cells[8, i+1]:=MediaInfo_Get(Handle, Stream_Audio, 0, 'SamplingRate', Info_Text, Info_Name);
              sgListaMetaDatos.Cells[9, i+1]:=MediaInfo_Get(Handle, Stream_Audio, 0, 'Format', Info_Text, Info_Name);

              pbProgress.Progress:=i;
              pbProgress.Repaint;
              Application.ProcessMessages;
            end;


La franja horaria es GMT +2. Ahora son las 07:30:13.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi