elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Únete al Grupo Steam elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Como obtener la duracion de los videos de una forma mas optima
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Como obtener la duracion de los videos de una forma mas optima  (Leído 5,343 veces)
juanedwin

Desconectado Desconectado

Mensajes: 31


Ver Perfil
Como obtener la duracion de los videos de una forma mas optima
« en: 7 Enero 2022, 19:10 pm »

saludos a todos y feliz año.....
quisiera tener una lista de archivos de videos con su tiempo de duracion ya sea en un listview o datagridview en WPF, la cuestion es como optener esa informacion porque estaba pensando en cargarlo al media player y asi obtener esos datos pero demoraria bastante si son muchos archivos.... habrá otra opcion para leer esos datos(tiempo de duracion) similar a los del explorador de windows en la visualizacion de detalles, una clase especial o algun comando que sirva de ayuda.. plis..


En línea

Mohicano

Desconectado Desconectado

Mensajes: 46



Ver Perfil
Re: Como obtener la duracion de los videos de una forma mas optima
« Respuesta #1 en: 9 Enero 2022, 23:29 pm »

similar a los del explorador de windows en la visualizacion de detalles

Puedes utilizar la API de Windows para obtener exactamente los mismos datos que se muestran en las propiedades de las columnas del explorador de Windows.

Hay que implementar muchas interfaces para ello, así que para simplificarlo puedes instalar el paquete NuGet 'WindowsAPICodePAck' (de Microsoft) directamente en tu proyecto, y una vez instalado puedes utilizar la siguiente extensión de método que he escrito:

Código
  1. Friend Module FileSystemInfoExtensions
  2.  
  3.    ''' ----------------------------------------------------------------------------------------------------
  4.    ''' <summary>
  5.    ''' Gets the value of a <see cref="ShellProperty(Of T)"/> for the source <see cref="FileSystemInfo"/> object.
  6.    ''' </summary>
  7.    ''' ----------------------------------------------------------------------------------------------------
  8.    ''' <param name="item">
  9.    ''' A <see cref="FileSystemInfo"/> object that points to a file or directory.
  10.    ''' </param>
  11.    '''
  12.    ''' <param name="propertySelector">
  13.    ''' Function to select the <see cref="ShellProperty(Of T)"/> for the source <see cref="FileSystemInfo"/> object.
  14.    ''' </param>
  15.    ''' ----------------------------------------------------------------------------------------------------
  16.    ''' <returns>
  17.    ''' The value of the <see cref="ShellProperty(Of T)"/> selected from <paramref name="propertySelector"/> parameter.
  18.    ''' </returns>
  19.    ''' ----------------------------------------------------------------------------------------------------
  20.    <DebuggerStepThrough>
  21.    <Extension>
  22.    <EditorBrowsable(EditorBrowsableState.Always)>
  23.    Public Function GetShellPropertyValue(Of T)(item As FileSystemInfo, propertySelector As Func(Of ShellObject, ShellProperty(Of T))) As T
  24.        Using shObj As ShellObject = ShellObject.FromParsingName(item.FullName)
  25.            Return propertySelector.Invoke(shObj).Value
  26.        End Using
  27.    End Function
  28.  
  29. End Module

Es suficiente versatil y sencillo de usar. Un ejemplo:

Código
  1. Dim mediaFile As New FileInfo("C:\Movie.mkv")
  2. Dim title As String = mediaFile.GetShellPropertyValue(Function(shObj As ShellObject) shObj.Properties.System.Title)
  3. Dim rawDuration As ULong? = mediaFile.GetShellPropertyValue(Function(shObj As ShellObject) shObj.Properties.System.Media.Duration)
  4. Dim duration As TimeSpan = TimeSpan.FromTicks(rawDuration.GetValueOrDefault(0UL))
  5.  
  6. Console.WriteLine($"File name: {mediaFile.Name}; Title: {title}; Duration: {duration:hh\:mm\:ss}")

Resultado de ejecución:
Citar
File name: Movie.mkv; Title: El Último Mohicano; Duration: 01:46:15

Nótese que el valor de 'rawDuration' y 'duration' es la duración total incluyendo milisegundos. Me parece más eficiente así para poder trabajar con tiempos de duración exactos. Luego tú le puedes dar el formato de string deseado como hice en ese ejemplo para mostrar {horas:minutos:segundos} como se muestra en la columna del explorador de Windows.

De todas formas si quieres simplificar esa parte para obtener directamente una cadena de texto con el tiempo tal y como se muestra en la columna del explorador de Windows, puedes utilizar la función ShellProperty.FormatForDisplay() especificando el valor PropertyDescriptionFormatOptions.LongTime:

Código
  1. Dim duration As String = shObj.Properties.System.Media.Duration.FormatForDisplay(PropertyDescriptionFormatOptions.LongTime)

---

Como alternativa al uso de la librería 'WindowsAPICodePack', y si quieres un análisis más profundo de archivos multimedia, puedes utilizar la librería nativa de MediaInfo ( https://mediaarea.net/es/MediaInfo/Download/Windows ). Y también puedes utilizar la librería de FFMPEG, o puedes usar el programa por linea de comandos FFPROBE.exe (incluido en la build de FFMPEG) directamente para obtener la duración de video. De todo esto hay ejemplos en Internet, también para C# y los de MediaInfo creo recordar que tienen publicado una plantilla de implementación para VB.NET también.


« Última modificación: 10 Enero 2022, 02:50 am por Mohicano » En línea

juanedwin

Desconectado Desconectado

Mensajes: 31


Ver Perfil
Re: Como obtener la duracion de los videos de una forma mas optima
« Respuesta #2 en: 10 Enero 2022, 22:53 pm »

disculpa, he instalado
 <?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="Microsoft.WindowsAPICodePack-Core" version="1.1.0.2" targetFramework="net472" />
</packages>
 pero no se donde poner ese codigo, ni como usarlo, soy nuevo en estos casos, ese friend module donde va ... :(

PD: tiene que ver que si uso windows for o WPF?
« Última modificación: 10 Enero 2022, 22:58 pm por juanedwin » En línea

Mohicano

Desconectado Desconectado

Mensajes: 46



Ver Perfil
Re: Como obtener la duracion de los videos de una forma mas optima
« Respuesta #3 en: 11 Enero 2022, 13:29 pm »

disculpa, he instalado
 <?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="Microsoft.WindowsAPICodePack-Core" version="1.1.0.2" targetFramework="net472" />
</packages>
 pero no se donde poner ese codigo, ni como usarlo, soy nuevo en estos casos, ese friend module donde va ... :(

PD: tiene que ver que si uso windows for o WPF?

Buenas. Como comprenderás, no voy a redactar aquí un texto para enseñarte las nociones básicas de programación .NET desde cero. Pero un módulo de clase, como el que he mostrado, es simplemente un contenedor donde definir métodos y otros miembros para agrupar código en Visual Basic .NET. El código que te mostré lo puedes usar tanto en la tecnología WPF como en Windows Forms. Puedes trasladar el código del módulo a una clase normal y corriente si estás más familiarizado con eso. No obstante, no mencionaste en que lenguaje estás trabajando, pero si lo necesitas convertir a C# tan solo dímelo.
« Última modificación: 11 Enero 2022, 14:16 pm por Mohicano » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
como obtener duracion de un archivo .mp3
PHP
cuerty 1 6,276 Último mensaje 14 Agosto 2008, 00:13 am
por Azielito
Cómo descargar vídeos de Instagram de forma sencilla
Noticias
wolfbcn 0 1,670 Último mensaje 4 Julio 2013, 13:25 pm
por wolfbcn
Obtener la duracion de archivos mp3
PHP
itzg3 1 2,070 Último mensaje 10 Mayo 2014, 05:57 am
por engel lex
duracion de los videos avi
Windows
hondo 2 2,520 Último mensaje 18 Diciembre 2014, 21:47 pm
por hondo
Cómo actualizar un PC de forma óptima: cosas que debes y que no debes hacer
Noticias
wolfbcn 1 9,526 Último mensaje 18 Junio 2019, 02:01 am
por El_Andaluz
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines