Hola buenas, os dejo aquí un pequeño ejemplo de como usar la DLL MediaIinfo que se usa para obtener una gran variedad de datos procedentes de archivos de Audio o Video. Yo la he usado para sacar datos de formatos de Audio tales como FLAC/APE/WV/MP3/MP4/M4A/WMA para un programa de conversión de música a AAC (m4A) y he conseguido sacar los TAGS e incluso las carátulas.
El código base lo saqué de un ejemplo de uso del plugin memory con la dll que encontré de casualidad para suerte mía, ya que antes usaba programas externos y aparte de ser mas engorroso a la hora de recuperar los datos tenía que usar bastantes más programas... El código se pega en "Global Functions" y puede que se pueda depurar pero no me he parado a ello :P
NOTA: Es necesario el plugin Memory para hacerla funcionar y la DLL que hace el trabajo que es el MediaInfo la cual podemos descargar gratuitamente desde la página oficial.
De donde tendremos que elejir la opción de 32Bits, DLL y Without Installer.
Código (Global):
Por supuesto hay que cambiar la ruta donde está la dll en Memory.OpenLibrary(60, "datos\\MediaInfo.dll") y no olvidaros de activar el plugin Memory.
Despues de poner eso en Funciones Globales tenemos que llamar a la función para lo que usaremos este código:
Esto inicializa el plugin y carga en memoria la DLL, con el if comprobamos a la vez que abrimos el archivo si lo hace correctamente, donde archivo es la ruta del archivo del cual queremos sacar la información.
Despues del if nos encontramos con la opción MediaInfo_Option que usaremos para decirle a la DLL la información que queramos saber a través de "Video;%Height%" del cual vemos que hay dos opciones que son "Video" y "%Height%" de las cuales veremos las disponibles más adelante.
La siguiente línea guarda el resultado en la variable "resultado" y las tres siguientes se encargan de cerrar y eliminar la DLL de la memoria.
Dicho esto y sabiendo lo básico ya es hora de que veamos las opciones disponibles pero esto es demasiado extenso como para abordarlo en el post por lo que os diré como sacarlas directamente de los archivos que vienen junto con la DLL.
Una vez descomprimido veremos que hay una serie de archivos y carpetas junto con la DLL, entramos en "Developers\List_Of_Parameters" y ahí veremos una serie de archivos CSV los cual podremos abrirlos con el Excel por ejemplo, dentro de los cuales veremos las distintas opciones disponibles.
Para usarlo tomaremos el nombre del archivo sin la extensión ".csv" y ese será el primer parámetro (Video en el ejemplo), y abriendo el archivo veremos dentro un lista de las opciones las cuales tendremos que poner entre % (Height en el ejemplo):
Despues solo apuntar que para hacer más fluido y rápido el script es mejor abrir el fichero una sola vez y despues poner las opciones seguidas como por ejemplo:
Espero que os sea de utilidad
El código base lo saqué de un ejemplo de uso del plugin memory con la dll que encontré de casualidad para suerte mía, ya que antes usaba programas externos y aparte de ser mas engorroso a la hora de recuperar los datos tenía que usar bastantes más programas... El código se pega en "Global Functions" y puede que se pueda depurar pero no me he parado a ello :P
NOTA: Es necesario el plugin Memory para hacerla funcionar y la DLL que hace el trabajo que es el MediaInfo la cual podemos descargar gratuitamente desde la página oficial.
De donde tendremos que elejir la opción de 32Bits, DLL y Without Installer.
Código (Global):
-----------------------------------------------------------------------------------------------------
----------------------------------------MEDIAINFO DLL-----------------------------------------------
-----------------------------------------------------------------------------------------------------
-- Kinds of Stream
Stream_General = 0
Stream_Video = 1
Stream_Audio = 2
Stream_Text = 3
Stream_Chapters = 4
Stream_Image = 5
Stream_Menu = 6
Stream_Max = 7
function MediaInfo_Init()
Memory.OpenLibrary(60, "datos\\MediaInfo.dll")
_MediaInfo_New = Memory.OpenFunction(60, "MediaInfoA_New", DLL_CALL_STDCALL, DLL_RETURN_LONG)
_MediaInfo_Option = Memory.OpenFunction(60, "MediaInfoA_Option", DLL_CALL_STDCALL, DLL_RETURN_INT)
_MediaInfo_Delete = Memory.OpenFunction(60, "MediaInfoA_Delete", DLL_CALL_STDCALL, DLL_RETURN_INT)
_MediaInfo_Close = Memory.OpenFunction(60, "MediaInfoA_Close", DLL_CALL_STDCALL, DLL_RETURN_INT)
_MediaInfo_Get = Memory.OpenFunction(60, "MediaInfoA_Get", DLL_CALL_STDCALL, DLL_RETURN_INT)
_MediaInfo_Inform = Memory.OpenFunction(60, "MediaInfoA_Inform", DLL_CALL_STDCALL, DLL_RETURN_INT)
_MediaInfo_Open = Memory.OpenFunction(60, "MediaInfoA_Open", DLL_CALL_STDCALL, DLL_RETURN_INT)
end
function MediaInfo_New()
return Memory.CallFunction(_MediaInfo_New)
end
function MediaInfo_Option(Handle, Option, Value)
if Value == nil then
Value = ""
end
return Memory.GetString(Memory.CallFunction(_MediaInfo_Option, Handle, Option, Value), -1, "Ascii")
end
function MediaInfo_Delete(Handle)
return Memory.CallFunction(_MediaInfo_Delete, Handle)
end
function MediaInfo_Close(Handle)
return Memory.CallFunction(_MediaInfo_Close, Handle)
end
function MediaInfo_Get(Handle, StreamKind, StreamNumber, Parameter, InfoKind, SearchKind)
if InfoKind == nil then
InfoKind = Info_Text
end
if SearchKind == nil then
SearchKind = Info_Name
end
return Memory.GetString(Memory.CallFunction(_MediaInfo_Get, Handle, StreamKind, StreamNumber, Parameter, InfoKind, SearchKind), -1, "Ascii")
end
function MediaInfo_Inform(Handle, reserved)
if reserved == nil then
reserved = 0
end
return Memory.GetString(Memory.CallFunction(_MediaInfo_Inform, Handle, reserved), -1, "Ascii")
end
function MediaInfo_Open(Handle, file)
return Memory.CallFunction(_MediaInfo_Open, Handle, file)
end
function MediaInfo_Exit()
Memory.CloseLibrary(60)
end
-----------------------------------------------------------------------------------------------------
----------------------------------------MEDIAINFO DLL END------------------------------------------
-----------------------------------------------------------------------------------------------------
Despues de poner eso en Funciones Globales tenemos que llamar a la función para lo que usaremos este código:
MediaInfo_Init()
hwnd = MediaInfo_New()
if MediaInfo_Open(hwnd, archivo) > 0 then
MediaInfo_Option(hwnd, "Inform", "Video;%Height%")
resultado = MediaInfo_Inform(hwnd);
MediaInfo_Close(hwnd)
MediaInfo_Delete(hwnd)
MediaInfo_Exit()
end
Despues del if nos encontramos con la opción MediaInfo_Option que usaremos para decirle a la DLL la información que queramos saber a través de "Video;%Height%" del cual vemos que hay dos opciones que son "Video" y "%Height%" de las cuales veremos las disponibles más adelante.
La siguiente línea guarda el resultado en la variable "resultado" y las tres siguientes se encargan de cerrar y eliminar la DLL de la memoria.
Dicho esto y sabiendo lo básico ya es hora de que veamos las opciones disponibles pero esto es demasiado extenso como para abordarlo en el post por lo que os diré como sacarlas directamente de los archivos que vienen junto con la DLL.
Una vez descomprimido veremos que hay una serie de archivos y carpetas junto con la DLL, entramos en "Developers\List_Of_Parameters" y ahí veremos una serie de archivos CSV los cual podremos abrirlos con el Excel por ejemplo, dentro de los cuales veremos las distintas opciones disponibles.
Para usarlo tomaremos el nombre del archivo sin la extensión ".csv" y ese será el primer parámetro (Video en el ejemplo), y abriendo el archivo veremos dentro un lista de las opciones las cuales tendremos que poner entre % (Height en el ejemplo):
Despues solo apuntar que para hacer más fluido y rápido el script es mejor abrir el fichero una sola vez y despues poner las opciones seguidas como por ejemplo:
MediaInfo_Init()
hwnd = MediaInfo_New()
if MediaInfo_Open(hwnd, "C:\\video.avi") > 0 then
MediaInfo_Option(hwnd, "Inform", "Video;%Height%")
alt0 = MediaInfo_Inform(hwnd);
MediaInfo_Option(hwnd, "Inform", "Video;%Width%")
ancho = MediaInfo_Inform(hwnd);
MediaInfo_Option(hwnd, "Inform", "Audio;%BitRate%")
audiobitrate = MediaInfo_Inform(hwnd);
MediaInfo_Close(hwnd)
MediaInfo_Delete(hwnd)
MediaInfo_Exit()
end