Wie MP3-Spieldauer berechnen

Gast #471177
Lesenswert?

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!
Gast #471248
Lesenswert?

@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?
Gast #471393
Lesenswert?

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.
Gast #471434
Lesenswert?

> 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.
Gast #471486
Lesenswert?

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
Gast #471493
Lesenswert?

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?
Gast #471550
Lesenswert?

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.
Gast #471607
Lesenswert?

> 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.
Gast #471645
Lesenswert?

> 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.
Gast #471783
Lesenswert?

>> 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.
Gast #471820
Lesenswert?

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.
Gast #472242
Lesenswert?

>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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren