Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Laufzeit von mp3 Dateien auslesen

Forumthread: Laufzeit von mp3 Dateien auslesen

Laufzeit von mp3 Dateien auslesen
mp3
Hallo zusammen,
über ein Makro hier aus dem Forum (s.u.) liste ich meine Hörbücher auf. Jetzt suche ich nach einer Möglichkeit, in einer neuen Spalte die Gesamtspieldauer der enthaltenen Dateien anzugeben.
Allerdings ist die Ordnerstruktur nicht gleich. Die Dateien können in bis zu 4 Unterordnern liegen.
Vielleicht hat ja jemand eine Idee.
Danke im Voraus
Carsten
Hier noch das Makro zum Auflisten der Ordner:
Option Explicit
Dim FSO, FO, FU, F
Dim lRow As Long
Dim icol As Integer
Sub OrdnerAuflisten()
Set FSO = CreateObject("Scripting.FileSystemObject")
icol = 0
lRow = 0
GetSubFolders "v:\"
End Sub

Function GetSubFolders(pfad)
Set FO = FSO.GetFolder(pfad)
Set FU = FO.SubFolders
On Error Resume Next
For Each F In FU
lRow = lRow + 1
icol = icol + 1
Cells(lRow, icol) = F.Name
GetSubFolders F.Path
Next
icol = icol - 1
End Function

Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Laufzeit von mp3 Dateien auslesen
23.09.2010 22:15:43
mp3

Hallo Carten,
probier mal.

' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Private Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand _
  As String, ByVal lpstrReturnString As String, ByVal uReturnLength As Long, ByVal hwndCallback As _
  Long) As Long

Sub list_MP3()
  Dim objFiles() As Object, lngRet As Long, lngIndex As Long
  Dim strPath As String, vntValues() As Variant
  
  strPath = "E:\Musik" 'Verzeichnis - Anpassen!
  
  Cells.Clear
  
  lngRet = FileSearchINFO(objFiles, strPath, "*.mp3", True)
  
  If lngRet > 0 Then
    Redim vntValues(1 To lngRet + 1, 1 To 3)
    vntValues(1, 1) = "Verzeichnis"
    vntValues(1, 2) = "Name"
    vntValues(1, 3) = "Dauer"
    For lngIndex = 0 To lngRet - 1
      vntValues(lngIndex + 2, 1) = objFiles(lngIndex).ParentFolder.Path
      vntValues(lngIndex + 2, 2) = objFiles(lngIndex).Name
      vntValues(lngIndex + 2, 3) = GetMP3Length(CStr(objFiles(lngIndex)))
    Next
  End If
  
  Range("A1").Resize(UBound(vntValues, 1), UBound(vntValues, 2)) = vntValues
  Rows(1).Font.Bold = True
  Columns(3).NumberFormat = "h:mm:ss.00;@"
  Columns.AutoFit
End Sub

Private Function FileSearchINFO(ByRef Files() As Object, ByVal InitialPath As String, Optional ByVal FileName As String = "*", _
    Optional ByVal SubFolders As Boolean = False) As Long

  
  '# PARAMETERINFO:
  '# Files: Datenfeld zur Ausgabe der Suchergebnisse
  '# InitialPath: String der das zu durchsuchende Verzeichnis angibt
  '# FileName: String der den gesuchten Dateityp oder Dateinamen enthält (Optional, Standard="*.*" findet alle Dateien)
  '# Beispiele: "*.txt" - Findet alle Textdateien
  '# "*name*" - Findet alle Dateien mit "name" im Dateinamen
  '# "*.avi;*.mpg" - Findet .avi und .mpg Dateien (Dateitypen mit ; trennen)
  '# SubFolders: Boolean gibt an, ob Unterordner durchsucht werden sollen (Optional, Standard=False)
  
  
  Dim fobjFSO As Object, ffsoFolder As Object, ffsoSubFolder As Object, ffsoFile As Object
  Dim intC As Integer, varFiles As Variant
  
  Set fobjFSO = CreateObject("Scripting.FileSystemObject")
  
  Set ffsoFolder = fobjFSO.GetFolder(InitialPath)
  
  On Error GoTo ErrExit
  
  If InStr(1, FileName, ";") > 0 Then
    varFiles = Split(FileName, ";")
  Else
    Redim varFiles(0)
    varFiles(0) = FileName
  End If
  For Each ffsoFile In ffsoFolder.Files
    If Not ffsoFile Is Nothing Then
      For intC = 0 To UBound(varFiles)
        If LCase(fobjFSO.GetFileName(ffsoFile)) Like LCase(varFiles(intC)) Then
          If IsArray(Files) Then
            Redim Preserve Files(UBound(Files) + 1)
          Else
            Redim Files(0)
          End If
          Set Files(UBound(Files)) = ffsoFile
          Exit For
        End If
      Next
    End If
  Next
  
  If SubFolders Then
    For Each ffsoSubFolder In ffsoFolder.SubFolders
      FileSearchINFO Files, ffsoSubFolder, FileName, SubFolders
    Next
  End If
  
  If IsArray(Files) Then FileSearchINFO = UBound(Files) + 1
  ErrExit:
  Set fobjFSO = Nothing
  Set ffsoFolder = Nothing
End Function


Private Function GetMP3Length(ByVal FileName As String) As Double
  'source: http://www.vbarchiv.net/tipps/tipp_2071-laenge-spieldauer-einer-mp3-datei-ermitteln.html
  Dim sReturn As String * 256
  Dim lRet As Integer
  
  mciSendString "open " & Chr(34) & FileName & Chr(34) & _
    " type MPEGVideo alias mp3audio", 0, 0, 0
  
  
  lRet = mciSendString("status mp3audio length", _
    sReturn, Len(sReturn), 0&)
  
  
  mciSendString "close mp3audio", 0, 0, 0
  
  GetMP3Length = Val(sReturn) / 1000 / 86400
End Function

Gruß Sepp

Anzeige
AW: Laufzeit von mp3 Dateien auslesen
24.09.2010 08:03:32
mp3
Hallo Josef,
funktioniert leider nicht. Das Makro hängt sich auf. Ich kann nur noch über den Taskmanager abbrechen.
Gruß
Carsten
;
Anzeige
Anzeige

Infobox / Tutorial

Laufzeit von mp3 Dateien auslesen


Schritt-für-Schritt-Anleitung

Um die Laufzeit von mp3 Dateien in Excel auszulesen, kannst du das folgende VBA-Makro verwenden. Stelle sicher, dass du die Pfade zu deinen mp3 Dateien anpasst.

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Erstelle ein neues Modul:
    • Klicke mit der rechten Maustaste auf "VBAProject (DeinWorkbookName)".
    • Wähle "Einfügen" > "Modul".
  3. Füge den folgenden Code ein:
Option Explicit
Private Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long

Sub list_MP3()
    Dim objFiles() As Object, lngRet As Long, lngIndex As Long
    Dim strPath As String, vntValues() As Variant

    strPath = "E:\Musik"  ' Verzeichnis - Anpassen!

    Cells.Clear

    lngRet = FileSearchINFO(objFiles, strPath, "*.mp3", True)

    If lngRet > 0 Then
        ReDim vntValues(1 To lngRet + 1, 1 To 3)
        vntValues(1, 1) = "Verzeichnis"
        vntValues(1, 2) = "Name"
        vntValues(1, 3) = "Dauer"

        For lngIndex = 0 To lngRet - 1
            vntValues(lngIndex + 2, 1) = objFiles(lngIndex).ParentFolder.Path
            vntValues(lngIndex + 2, 2) = objFiles(lngIndex).Name
            vntValues(lngIndex + 2, 3) = GetMP3Length(CStr(objFiles(lngIndex)))
        Next
    End If

    Range("A1").Resize(UBound(vntValues, 1), UBound(vntValues, 2)) = vntValues
    Rows(1).Font.Bold = True
    Columns(3).NumberFormat = "h:mm:ss.00;@"
    Columns.AutoFit
End Sub

Private Function GetMP3Length(ByVal FileName As String) As Double
    Dim sReturn As String * 256
    Dim lRet As Long

    mciSendString "open " & Chr(34) & FileName & Chr(34) & " type MPEGVideo alias mp3audio", 0, 0, 0
    lRet = mciSendString("status mp3audio length", sReturn, Len(sReturn), 0&)
    mciSendString "close mp3audio", 0, 0, 0

    GetMP3Length = Val(sReturn) / 1000 / 86400
End Function
  1. Führe das Makro aus:
    • Schließe den VBA-Editor und kehre zu Excel zurück.
    • Drücke ALT + F8, wähle list_MP3 und klicke auf "Ausführen".

Häufige Fehler und Lösungen

  • Das Makro hängt sich auf:

    • Stelle sicher, dass der Pfad korrekt ist und die mp3 Dateien vorhanden sind. Überprüfe auch, ob du genügend Berechtigungen hast, um auf den Ordner zuzugreifen.
  • Falsche Laufzeit angezeigt:

    • Überprüfe, ob die mp3 Dateien nicht beschädigt sind. Eine andere Ursache könnte eine falsche oder nicht unterstützte Dateistruktur sein.

Alternative Methoden

Wenn das VBA-Makro nicht funktioniert, kannst du auch Tools von Drittanbietern verwenden, um die mp3 Daten zu extrahieren. Programme wie MP3Tag oder MediaInfo können dir helfen, die Laufzeiten der mp3 Dateien zu ermitteln und diese in eine CSV-Datei zu exportieren, die du dann in Excel importieren kannst.


Praktische Beispiele

  1. Beispiel für eine mp3 Liste:

    • Stelle dir vor, du hast eine mp3 Liste deiner Hörbücher in einem Ordner. Mit dem obigen Makro kannst du die Spieldauer jeder Datei in einer Excel-Tabelle auflisten.
  2. Verwenden von Unterordnern:

    • Wenn deine mp3 Dateien in Unterordnern liegen, stelle sicher, dass das True im FileSearchINFO-Funktionsaufruf gesetzt ist, um Unterordner zu durchsuchen.

Tipps für Profis

  • Optimierung des Codes:

    • Wenn du viele mp3 Dateien hast, kann die Ausführung etwas Zeit in Anspruch nehmen. Überlege, den Code so zu optimieren, dass nur bestimmte Unterordner oder Dateitypen durchsucht werden.
  • Verwendung von Excel-Funktionen:

    • Du kannst die Ergebnisse nach Laufzeit sortieren oder filtern, um schnell die längsten oder kürzesten mp3 Dateien zu finden.

FAQ: Häufige Fragen

1. Wie finde ich mp3 Dateien in mehreren Ordnern? Du kannst das VBA-Makro anpassen, um rekursiv nach mp3 Dateien in Unterordnern zu suchen. Setze SubFolders auf True.

2. Kann ich die Laufzeit als Minuten und Sekunden anzeigen? Ja, du kannst die Formatierung in der Zeile Columns(3).NumberFormat anpassen, um die Laufzeit in einem gewünschten Format anzuzeigen, z.B. "mm:ss".

3. Funktioniert das Makro auch in Excel 365? Ja, das VBA-Makro sollte in Excel 365 sowie in älteren Versionen von Excel funktionieren. Achte darauf, dass die Sicherheitseinstellungen für Makros entsprechend konfiguriert sind.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige