Hallo! Für eine Art MP3-Player, den ich schreibe, brauche ich die Spieldauer eines MP3-Files. Wie berechnet Windows die Spieldauer eines MP3-Files? Oder wie kann man es auch machen? Das muss gehen, ohne jedes einzelne Frame durchzurechnen, denn geht man mit der Maus über eine MP3-Datei erhält man sofort (ohne daß der Rechner auf der Platte rumorgelt) die Spieldauer. Ich brauche die Spieldauer nur auf 2 Sekunden genau, Millisekunden sind egal. Vielen Dank!
Mit der Dateigröße und Bitrate die Spieldauer berechnen. Bitrate kann man aus dem Header herausfinden. Hier Infos (mal eben in Google gefunden, vielleicht gibs noch bessere) zum Header-Aufbau: http://sites.inka.de/sites/plagiats-home/mp3-header.html
Wenn die Bitrate nicht konstant ist (VBR) wird das schwierig. Ich vermute mal das die Gesamtzeit eines Stückes vom den MP3 Encodern im Header abgelegt wird ? Stefan
@X.H. Wie Stefan geschrieben hat: bei VBR (variabler Bitrate) kann das dann ja nicht funktionieren. @Stefan Problem ist, daß nicht zwingend in jeder Datei die Gesamtspieldauer abgelegt sein muss...und auch leider nicht ist. Aber wie berechnet z.B. Windows das so schnell und ohne die Datei zudurchforsten?
Oder gibts da vielleicht eine Trick, wenn man es nur auf 2 Sekunden genau braucht, also eine ziemlich genaue Schätzung?
Da wirst du wohl rechnen müssen. Auch Player wie Winamp berechnen bei VBR wärend des Abspielens die durchschnittliche Bitrate und errechnen daraus die Spiellänge. Das ist gut an der Anzeige der Restspieldauer zu sehen, die bei VBR Tracks in den ersten 5-10 Sekunden doch stark schwankt. Nach ca. 20 Sekunden hat sich's dann eingependelt. > Das muss gehen, ohne jedes einzelne Frame durchzurechnen, denn geht man > mit der Maus über eine MP3-Datei erhält man sofort (ohne daß der Rechner > auf der Platte rumorgelt) die Spieldauer. Schon mal die von Windows errechnete Spieldauer nachgemessen ;-)? Windows gibt auch bei VBR eine Bitrate an, was ja eigentlich nicht sein kann.
> Ich vermute mal das die Gesamtzeit eines Stückes vom den MP3 Encodern > im Header abgelegt wird ? Bei mp3 gibt's keinen Header. Es ist schließlich ein Streaming-Format. > Windows gibt auch bei VBR eine Bitrate an, was ja eigentlich nicht sein > kann. Man kann aber eine durchschnittliche Bitrate errechnen.
@Rolf Durchschnittliche Bitrate. Also die ersten 5 Frames nehmen und den Durchschnitt dann auf die gsamte File-Länge umrechnen?
Also ich hätte das jetzt ganz blöd einfach durch Dateigröße minus Header durch bitrate gerechnet...
Bei variabler Bitrate gibt diese ja eigentlich nur einen Durchschnittswert über dass gesamte Lied an, deshalb sollte es hier auch funtionieren. Bsp: 3,2MB ~ 3.276,8KB 256kBit/s = 250KB/s -> 3.276,8KB / 32KB/s = 102,4s ~ 1m 42s
Das versteh ich nicht. Bei MP3 wird pro Frame die Bitrate angegeben. Bei VBR wechselt diese eventuell von Frame zu Frame. Und welcher Frame gibt mir dann die durchschnittliche Bitrate an? Gleich der erste Frame?
So langsam dämmerts bei mir wieder... Hier sind die Header und die nötigen Berechnungen nochmal erklärt: http://gabriel.mp3-tech.org/mp3infotag.html http://www.hydrogenaudio.org/forums/lofiversion/index.php/t5956.html http://www.dv.co.yu/mpgscript/mpeghdr.htm und hier hat jemand das gleiche vorgehabt, allerdings in Delphi. Hab mir den Quellcode nicht abgeschaut, aber das ist vielleicht ein Anfang. http://timeforge.de/board/thread.php?threadid=89&sid=6463925831715c55d1d3e116f992abf8 Ansonsten würde ich dann wohl auch die ersten 5 - 10 Frames nehmen, wobei das aufgrund der Machart der meisten Lieder wohl eher ungeeignet ist. Daher zufällig 5 - 10 Frames aus dem ganzen Lied suchen dürfte der wirklichen Bitrate näher kommen.
> Und welcher Frame gibt mir dann die durchschnittliche Bitrate an? Gleich > der erste Frame? Nein, die durchschnittliche Bitrate musst du errechnen (Bittraten von x Frames addieren und durch x teilen): Frame 1: 192 kBit/s Frame 2: 160 kBit/s Frame 3: 160 kBit/s ------------------- Summe: 512 kBit/s / 3 Frames = 170,67 kBit/s durchschnitt Je mehr Frames du zur Berechnung verwendest, desto genauer wird's. Das beste Ergebnis erhälst du, wenn du alle Frames zur Berechnung heranziehst.
> Bei mp3 gibt's keinen Header. Es ist schließlich ein Streaming-Format.
Seit wann wird bei Streaming sofort bei Datenempfang abgespielt?
Natürlich gibts einen Header, schließlich muß ja sichergestellt sein,
dass nicht jeder Blödsinn zum Decoder kommt.
Ob diese Verfahren so toll sind... Deswegen habe ich nämlich MP3s, die mit 28:32 minuten gekennzeichnet sein. Sind aber trotzdem nach 4 Minuten zu Ende. :|
> Natürlich gibts einen Header, schließlich muß ja sichergestellt sein, > dass nicht jeder Blödsinn zum Decoder kommt. Bei MP3 gibt es keinen File-Header. Jeder Frame hat seinen Frame-Header.
>> Ich vermute mal das die Gesamtzeit eines Stückes vom den MP3 Encodern >> im Header abgelegt wird ? >[...diverse Posts zum Thema Header...] >Hab gar nicht mitbekommen, dass jemand von File-Header sprach. Sorry, aber die erste Aussage/Frage lies mich vermuten, dass ein Gesamt- oder File-Header gemeint sei. Dass gemeint sein könnte, die Gesamtzeit steht in jedem Frame-Header, hatte ich nicht in Erwägung gezogen.
Na, es war vermutlich auch ein Header für den gesamten File gemeint. Denn ich suche nach einem schnellen Weg, ohne die ganze Datei durchzurechnen. Also scheint nichts anderes zu geben, als ein paar Frames zu nehmen, einen Durchschnitt zu errechnen und dann auf die gesamte Filelänge umzurechnen.
>Also scheint nichts anderes zu geben, als ein paar Frames zu nehmen, >einen Durchschnitt zu errechnen und dann auf die gesamte Filelänge >umzurechnen. ...und anschliessend im TAG speichern, damit nicht nochmal gerechnet werden muss.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.