Rubrik: Multimedia & Sound · Video | VB-Versionen: VB4, VB5, VB6 | 06.12.02 |
Größe und Spieldauer eines AVI-Videos ermitteln Dieses Beispiel zeigt, wie sich die Bildgröße und die Spielzeit einer AVI-Datei ermitteln lässt. | ||
Autor: Steffen Stamprath | Bewertung: | Views: 21.623 |
mitglied.lycos.de/stsoft2/index.htm | System: Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Vor kurzem haben wir Ihnen gezeigt, wie sich ein AVI-Video per API abspielen lässt:
AVI-Video per API in PictureBox abspielen
Heute möchten wir Ihnen zeigen, wie sich die Größe des Videos ermitteln lässt, so dass Sie die PictureBox zum Abspielen des Videos auch entsprechend groß anzeigen können. Außerdem zeigt unser Tipp noch, wie sich die Gesamt-Spielzeit des Files auslesen lässt.
' zunächst die benötigten API-Deklarationen Private Declare Function AVIFileOpen Lib "avifil32" _ Alias "AVIFileOpenA" ( _ ppfile As Long, _ ByVal szFile As String, _ ByVal mode As Long, _ pclsidHandler As Any) As Long Private Declare Function AVIFileRelease Lib "avifil32" ( _ ByVal pfile As Long) As Long Private Declare Function AVIFileInfo Lib "avifil32" _ Alias "AVIFileInfoA" ( _ ByVal pfile As Long, _ pfi As AVIFileInfo, _ ByVal lSize As Long) As Long Private Declare Sub AVIFileInit Lib "avifil32" () Private Declare Sub AVIFileExit Lib "avifil32" () ' AVI Info-Struktur Private Type AVIFileInfo dwMaxBytesPerSec As Long dwFlags As Long dwCaps As Long dwStreams As Long dwSuggestedBufferSize As Long dwWidth As Long dwHeight As Long dwScale As Long dwRate As Long dwLength As Long dwEditCount As Long szFileType As String * 64 End Type
' Breite und Höhe der animierten Bildsequenz ermitteln ' (Rückgabewert erfolgt in Pixel!!!) Public Sub AVI_GetSize(ByVal sFile As String, _ nWidth As Long, nHeight As Long) Dim hFile As Long Dim AviInfo As AVIFileInfo ' Fehlerbehandlung aktivieren On Error Resume Next ' Initialisieren AVIFileInit ' AVI öffnen (Handle erstellen) If AVIFileOpen(hFile, sFile, &H20, ByVal 0&) = 0 Then ' Infos lesen If AVIFileInfo(hFile, AviInfo, Len(AviInfo)) = 0 Then nWidth = AviInfo.dwWidth nHeight = AviInfo.dwHeight End If AVIFileRelease hFile End If ' Beenden AVIFileExit On Error Goto 0 End Sub
' Länge (Spieldauer) ermitteln ' (Rückgabewert erfolgt in Sekunden) Public Function AVI_GetLength(ByVal sFile As String) As Long Dim hFile As Long Dim AviInfo As AVIFileInfo Dim nLength As Long ' Fehlerbehandlung aktivieren On Error Resume Next ' Initialisieren AVIFileInit ' AVI öffnen (Handle erstellen) If AVIFileOpen(hFile, sFile, &H20, ByVal 0&) = 0 Then ' Infos lesen If AVIFileInfo(hFile, AviInfo, Len(AviInfo)) = 0 Then nLength = AviInfo.dwLength / AviInfo.dwRate * AviInfo.dwScale End If AVIFileRelease hFile End If ' Beenden AVIFileExit On Error Goto 0 ' Rückgabewert AVI_GetLength = nLength End Function
Beispiel:
' AVI-Infos ermitteln Dim sFile As String Dim nWidth As Long Dim nHeight As Long Dim nLength As Long ' AVI-Datei sFile = "c:\winnt\clock.avi" ' Bildgröße AVI_GetSize sFile, nWidth, nHeight ' Spielzeit in Sek. nLength = AVI_GetLength(sFile)
Bei längeren AVI-Videos ist es sinnvoll die ermittelte Spielzeit nicht in Sekunden, sondern in Minuten und Sekunden anzugeben. Hierfür können Sie nachfolgende "Hilfsfunktion" verwenden, die Sekunden in das Format mm:ss umwandel.
' Sekunden nach mm:ss umrechnen Private Function AVI_FormatTime( _ ByVal iSec As Long) As String Dim iMin As Long iMin = Int(iSec / 60) iSec = iSec - (iMin * 60) AVI_FormatTime = Format$(iMin, "00") & ":" & _ Format$(iSec, "00") End Function