Rubrik: Multimedia & Sound · Video | VB-Versionen: VB2005, VB2008 | 19.05.09 |
Größe und Spieldauer eines AVI-Videos ermitteln Dieses Beispiel zeigt, wie sich die Bildgröße (Höhe x Breite) und die Spielzeit einer AVI-Datei ermitteln lässt. | ||
Autor: Dieter Otter | Bewertung: | Views: 11.650 |
www.tools4vb.de | System: 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.
Erstellen Sie ein neues Klassenmodul namens AVI und fügen nachfolgenden Code ein:
Imports System.Runtime Imports System.Runtime.InteropServices Public Class AVI ' benötigte API-Deklarationen Private Declare Auto Function AVIFileOpen Lib "avifil32" ( _ ByRef ppfile As Integer, _ ByVal szFile As String, _ ByVal mode As Integer, _ ByVal pclsidHandler As Integer) As Integer Private Declare Auto Function AVIFileRelease Lib "avifil32" ( _ ByVal pfile As Integer) As Integer Private Declare Auto Function AVIFileInfo Lib "avifil32" ( _ ByVal pfile As Integer, _ ByRef pfi As AVIInfo, _ ByVal lSize As Integer) As Integer Private Declare Auto Sub AVIFileInit Lib "avifil32" () Private Declare Auto Sub AVIFileExit Lib "avifil32" () ' AVI Info-Struktur <StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Auto)> _ Private Structure AVIInfo Public dwMaxBytesPerSec As Integer Public dwFlags As Integer Public dwCaps As Integer Public dwStreams As Integer Public dwSuggestedBufferSize As Integer Public dwWidth As Integer Public dwHeight As Integer Public dwScale As Integer Public dwRate As Integer Public dwLength As Integer Public dwEditCount As Integer <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=64)> _ Public szFileType As String End Structure ' Eigenschaften Private _Length As Integer Private _Width As Integer Private _Height As Integer
''' <summary> ''' Erstellt eine neue Instanz der Klasse und liest die AVI-Informationen ''' der übergebenenen AVI-Datei aus. ''' </summary> ''' <param name="Filename">Dateiname des AVI-Files</param> Public Sub New(ByVal Filename As String) Dim hFile As Integer Dim AviInfo As New AVIInfo ' Fehlerbehandlung aktivieren Try ' Initialisieren AVIFileInit() ' AVI öffnen (Handle erstellen) If AVIFileOpen(hFile, Filename, &H20, 0&) = 0 Then ' Infos lesen If AVIFileInfo(hFile, AviInfo, Marshal.SizeOf(AviInfo)) = 0 Then With AviInfo _Width = .dwWidth _Height = .dwHeight _Length = .dwLength / .dwRate * .dwScale End With End If End If Catch ex As Exception Finally ' Beenden AVIFileExit() If hFile <> 0 Then AVIFileRelease(hFile) End Try End Sub
''' <summary> ''' Gibt die Breite der animierten Bildsequenz zurück. ''' </summary> Public ReadOnly Property Width() As Integer Get Return _Width End Get End Property
''' <summary> ''' Gibt die Höhe der animierten Bildsequenz zurück. ''' </summary> Public ReadOnly Property Height() As Integer Get Return _Height End Get End Property
''' <summary> ''' Gibt die Spieldauer der animierten Bildsequenz in Sekunden zurück. ''' </summary> Public ReadOnly Property Length() As Integer Get Return _Length End Get End Property
''' <summary> ''' Gibt die Spieldauer im Format mm:ss zurück. ''' </summary> Public ReadOnly Property FormatLength() As String Get Return CDate("00:00:00").AddSeconds(_Length).ToString("mm:ss") End Get End Property
''' <summary> ''' Gibt die Spieldauer im angegebenen Format zurück. ''' </summary> ''' <param name="Format">Formatierungsstring, z.B. HH:mm:ss</param> Public ReadOnly Property FormatLength(ByVal Format As String) As String Get Return CDate("00:00:00").AddSeconds(_Length).ToString(Format) End Get End Property
End Class
Aufrufbeispiel:
Dim filename As String = "d:\clock.avi" Dim AVIInfo As New AVI(filename) With AVIInfo MsgBox("Höhe x Breite: " & CStr(.Height) & " x " & CStr(.Width) & vbCrLf & _ "Spieldauer: " & CStr(.Length) & " Sekunden" & vbCrLf & _ "mm:ss: " & .FormatLength() & vbCrLf & _ "hh:mm:ss: " & .FormatLength("HH:mm:ss")) End With