Dimension et durée d'une video

Résolu
promethee2003 Messages postés 38 Date d'inscription lundi 8 novembre 2004 Statut Membre Dernière intervention 10 décembre 2006 - 10 déc. 2006 à 11:05
dracoon Messages postés 13 Date d'inscription mercredi 26 avril 2006 Statut Membre Dernière intervention 8 février 2008 - 2 avril 2007 à 18:15
Bonjour

Quelqu'un connaitrai-t'il un moyen de trouver la durée et la dimension d'une vidéo(avi) en VB 2005 ?

Merci

5 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
10 déc. 2006 à 17:47
Salut
Comme a chaque fois qu'on cherche des infos sur des fichiers standardisés, il faut rechercher comment est définie la structure de ces fichiers.
Cette structure contient toujours trois éléments minimum :
- L'entête de reconnaissance : Pour les AVIs, les fichiers commencent toujours par ces codes hexa 52 49 46 46 (RIFF)
- Le Header : Il définit et fourni des infos sur la méthode avec laquelle il faut s'adresser pour accéder aux données.
   Il donne aussi, d'une manière structurée, quelques infos, dont la durée de la vidéo (en sec)
   --> Renseigne toi sur le format du fichier avec ce genre de recherche "avi file structure" et de site clique ici
         Comme c'est un format de Microsoft, tu peux direct aller sur www.msdn.com
- Les données

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Champion du monde de boule de cristal - 2005
Le savoir est la seule matière qui s'accroit quand on
3
promethee2003 Messages postés 38 Date d'inscription lundi 8 novembre 2004 Statut Membre Dernière intervention 10 décembre 2006
10 déc. 2006 à 19:26
Ok merci.

j'ai trouvé une solution (avec api) je la donne au cas ou ca interresse quelqu'un d'autre

Imports System.Runtime.InteropServices
Public Class TEST
#Region "Structure"
<structlayout(layoutkind.sequential, pack:="1)"> Private Structure AVIFILEINFO
<marshalas(unmanagedtype.u4)> Public dwMaxBytesPerSecond As Int32
<marshalas(unmanagedtype.u4)> Public dwFlags As Int32
<marshalas(unmanagedtype.u4)> Public dwCaps As Int32
<marshalas(unmanagedtype.u4)> Public dwStreams As Int32
<marshalas(unmanagedtype.u4)> Public dwSuggestedBufferSize As Int32
<marshalas(unmanagedtype.u4)> Public dwWidth As Int32
<marshalas(unmanagedtype.u4)> Public dwHeight As Int32
<marshalas(unmanagedtype.u4)> Public dwScale As Int32
<marshalas(unmanagedtype.u4)> Public dwRate As Int32
<marshalas(unmanagedtype.u4)> Public dwLength As Int32
<marshalas(unmanagedtype.u4)> Public dwEditCount As Int32
<marshalas(unmanagedtype.byvalarray, arraysubtype:="UnmanagedType.U2," sizeconst:="64)"> Public szFileType As Char()
End Structure
#End Region
#Region "Declarations"
'Fonction D'ouverture du fichier avi
Private Declare Auto Function AVIFileOpen Lib "avifil32" (ByRef ppfile As IntPtr, ByVal szFile As String, ByVal mode As Integer, ByVal pclsidHandler As Integer) As Integer
'Fonction pour relacher le fichier
Private Declare Auto Function AVIFileRelease Lib "avifil32" (ByVal pfile As IntPtr) As Integer
'Fonction pour recupurer les informations du fichier ouvert
Private Declare Auto Function AVIFi Lib "avifil32" Alias "AVIFileInfo" (ByVal pfile As IntPtr, ByRef pfi As AVIFILEINFO, ByVal lSize As Integer) As Integer
'Fonction pour initialiser l'api
Private Declare Auto Sub AVIFileInit Lib "avifil32" ()
'Fonction pour fermer l'api
Private Declare Auto Sub AVIFileExit Lib "avifil32" ()
#End Region

#Region "Constantes"
Private Const OF_SHARE_DENY_WRITE As Integer = 32
Private Const OF_READWRITE As Integer = 2
#End Region
#Region "Functions"
Function GetAviInformations() As String
Dim H_File As New IntPtr
Dim pfi As New AVIFILEINFO

AVIFileInit()

AVIFileOpen(H_File, "c:/test.avi", OF_READWRITE, 0)

'Devrait retourné 0
Debug.WriteLine(AVIFi(H_File, pfi, Marshal.SizeOf(pfi)))

AVIFileRelease(H_File)

AVIFileExit()

Return "Test"
End Function
#End Region
End Class


Merci encore</marshalas(unmanagedtype.byvalarray,></marshalas(unmanagedtype.u4)></marshalas(unmanagedtype.u4)></marshalas(unmanagedtype.u4)></marshalas(unmanagedtype.u4)></marshalas(unmanagedtype.u4)></marshalas(unmanagedtype.u4)></marshalas(unmanagedtype.u4)></marshalas(unmanagedtype.u4)></marshalas(unmanagedtype.u4)></marshalas(unmanagedtype.u4)></marshalas(unmanagedtype.u4)></structlayout(layoutkind.sequential,>
0
promethee2003 Messages postés 38 Date d'inscription lundi 8 novembre 2004 Statut Membre Dernière intervention 10 décembre 2006
10 déc. 2006 à 19:26
désolé pour le post en vrac... je sais pas pourquoi...
0
promethee2003 Messages postés 38 Date d'inscription lundi 8 novembre 2004 Statut Membre Dernière intervention 10 décembre 2006
10 déc. 2006 à 19:27
Imports System.Runtime.InteropServices
Public Class TEST
#Region "Structure"
<StructLayout(LayoutKind.Sequential, Pack:=1)> Private Structure AVIFILEINFO
<MarshalAs(UnmanagedType.U4)> Public dwMaxBytesPerSecond As Int32
<MarshalAs(UnmanagedType.U4)> Public dwFlags As Int32
<MarshalAs(UnmanagedType.U4)> Public dwCaps As Int32
<MarshalAs(UnmanagedType.U4)> Public dwStreams As Int32
<MarshalAs(UnmanagedType.U4)> Public dwSuggestedBufferSize As Int32
<MarshalAs(UnmanagedType.U4)> Public dwWidth As Int32
<MarshalAs(UnmanagedType.U4)> Public dwHeight As Int32
<MarshalAs(UnmanagedType.U4)> Public dwScale As Int32
<MarshalAs(UnmanagedType.U4)> Public dwRate As Int32
<MarshalAs(UnmanagedType.U4)> Public dwLength As Int32
<MarshalAs(UnmanagedType.U4)> Public dwEditCount As Int32
<MarshalAs(UnmanagedType.ByValArray, ArraySubType:=UnmanagedType.U2, SizeConst:=64)> Public szFileType As Char()
End Structure
#End Region
#Region "Declarations"
'Fonction D'ouverture du fichier avi
Private Declare Auto Function AVIFileOpen Lib "avifil32" (ByRef ppfile As IntPtr, ByVal szFile As String, ByVal mode As Integer, ByVal pclsidHandler As Integer) As Integer
'Fonction pour relacher le fichier
Private Declare Auto Function AVIFileRelease Lib "avifil32" (ByVal pfile As IntPtr) As Integer
'Fonction pour recupurer les informations du fichier ouvert
Private Declare Auto Function AVIFi Lib "avifil32" Alias "AVIFileInfo" (ByVal pfile As IntPtr, ByRef pfi As AVIFILEINFO, ByVal lSize As Integer) As Integer
'Fonction pour initialiser l'api
Private Declare Auto Sub AVIFileInit Lib "avifil32" ()
'Fonction pour fermer l'api
Private Declare Auto Sub AVIFileExit Lib "avifil32" ()
#End Region

#Region "Constantes"
Private Const OF_SHARE_DENY_WRITE As Integer = 32
Private Const OF_READWRITE As Integer = 2
#End Region
#Region "Functions"
Function GetAviInformations() As String
Dim H_File As New IntPtr
Dim pfi As New AVIFILEINFO

AVIFileInit()

AVIFileOpen(H_File, "c:/test.avi", OF_READWRITE, 0)

'Devrait retourné 0
Debug.WriteLine(AVIFi(H_File, pfi, Marshal.SizeOf(pfi)))

AVIFileRelease(H_File)

AVIFileExit()

Return "Test"
End Function
#End Region
End Class
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
dracoon Messages postés 13 Date d'inscription mercredi 26 avril 2006 Statut Membre Dernière intervention 8 février 2008
2 avril 2007 à 18:15
je pense qu'il y a bien plus simple en utilisant la dll wmp.dll de windows media player.
Je ne m'y connait pas trop en VB mais il me semble que cela peut entre fait en quelques lignes du moins beaucoup plus court.
0
Rejoignez-nous